Sails控制器如何获取请求历史记录

Sails控制器如何获取请求历史记录

问题描述:

我正在使用Nodejs(使用Sails & Passport框架)开发网站。我想知道Sails控制器如何获取用户的请求历史记录。 例如,用户请求'/',但控制器会将用户重定向到'/ signin'。然后用户使用res.redirect()请求'/ signin'。因此,请求历史看起来像Sails控制器如何获取请求历史记录

  1. '/'
  2. '/登入'。

现在SignInController处理这个请求,最后它想把用户重定向回'/'。所以控制器应该知道用户请求的历史。我想应该有一些框架可以记录请求历史并使用会话或其他东西存储它们。任何人都可以给我一些关于这个的提示吗?

+0

你的意思是“重定向”? http重定向(如301)? – mdunisch

+0

是的。使用重定向的http重定向() – RandyTek

让我知道如果我理解得好,但是你想要做的是将用户重定向到登录前的任何URL,对吗?

要做到这一点,您可以使用策略(针对所有请求执行的策略,只针对您想要的方法执行)。 我们在这里做的是保存最新的位置只(而不是整个历史)

API /政策/ ensureReturnToUrl

'use strict'; 

module.exports = function (req, res, next) { 

    req.session.returnTo = req.url; 

    return next(); 
}; 

配置部分看起来像在配置/ policies.js

'*': ['passport', 'isAuthenticated', 'ensureReturnToUrl'], 
    AuthController: { 
    '*': ['passport'] 
    } 

您必须小心谨慎才能将此政策放在正确的位置。例如,你不希望在你的“/登录”方法(这是违背整点)

然后,成功登录后,你只需要阅读“returnTo”属性和重定向用户:(例如,在AuthController

if (req.session.returnTo) { 
    res.redirect(req.session.returnTo); 
} else { 
    res.redirect('/'); 
} 

显然,这需要适合您的使用情况,但政策肯定是你所需要的。

+0

ThxAurélien。您的解决方案正是我所需要的。但还有一个问题。其实你在这里添加一个定制的中间件。但是,是否有任何现有的中间件可以通过npm安装,从而避免重新发明*? – RandyTek

+0

事实上,是的,你可以直接使用这个:https://github.com/jaredhanson/connect-ensure-login然而,我必须自定义一些处理特定用例的/ register URL所以编写我自己的策略更“容易”。但随时选择最适合你:) –

+0

Thx。非常感谢您的帮助。 – RandyTek