如何在Passport.js和Sails.js注册后redirect到特定位置?
我正在使用Sails.js,并且已经安装了本地身份validation的passport
和passport-local
模块。
当我安装护照模块时,一些文件是在策略,服务,模型和控制器下自动创build的。 我已经修改了一些这些文件以适应我的需求,但是,我无法find一种方法来将用户redirect到特定位置后,他注册。
现在,默认行为是用户注册并自动进行身份validation,然后redirect到用户在login时redirect到的相同url。
我试图查看不同的护照生成的文件,但我找不到“注册callback”或类似的东西。 在AuthController
,有一个“callback”方法,看起来像这样:
callback: function (req, res) { function tryAgain (err) { var flashError = req.flash('error')[0]; if (err && !flashError ) { req.flash('error', 'Error.Passport.Generic'); } else if (flashError) { req.flash('error', flashError); } req.flash('form', req.body); var action = req.param('action'); switch (action) { case 'register': res.redirect('/signup'); break; case 'disconnect': res.redirect('back'); break; default: res.redirect('/login'); } } passport.callback(req, res, function (err, user) { if (err) { return tryAgain(); } req.login(user, function (err) { if (err) { return tryAgain(); } res.redirect('/'); }); }); },
但是,这只适用于用户身份validation(login),我想。 我想答案可能在于服务文件夹的护照文件下,但我不确定。 我还没有完全理解代码。
我只是寻找正确的地方甚至放置这个代码,因为我不知道。 那么, 如何在注册后将用户redirect到特定的位置呢? (但只有在那之后)
谢谢。
那么,我不知道这是否是最好的办法,但我觉得它很简单, 这就是我所做的,如果有人发现自己处于类似的情况下,类似的设置。
在api/services/protocols/local.js
,有一个名为api/services/protocols/local.js
的方法; 在这个方法中,在next()
被调用之前,向user
声明属性isNew
,如下所示:
user.isNew = true;
然后,在AuthController
的callback
方法中,在controllers文件夹下,如果用户刚刚注册, req.user.isNew
将可用(并设置为true
)为req.user.isNew
,这样就可以用你的逻辑,在res.redirect
之前。 所以,像这样的东西(在该方法中):
if(req.user.isNew) { return res.redirect('/welcomePage'); } return res.redirect('/dashboard');
就是这样。