我使用 Sails.js,并且安装了 passport
和 passport-local
模块,用于本地身份验证。
当我安装 Passport 模块时,会在策略、服务、模型和 Controller 下自动创建一些文件。我修改了其中一些文件以满足我的需要,但是,我找不到在用户注册后将其重定向到特定位置的方法。
目前,默认行为是用户注册并自动进行身份验证,然后重定向到用户登录时重定向到的同一 URL。
我尝试查看不同的 Passport 生成文件,但找不到“注册回调”或类似的内容。在 AuthController
中,有一个“回调”方法,如下所示:
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('/');
});
});
},
但是,我认为这仅适用于用户经过身份验证(登录)时。 我认为答案可能位于服务文件夹中的 Passport 文件下,但我不确定。我还没有完全理解代码。
我只是在寻找放置此代码的正确位置,因为我不知道。那么,用户注册后如何将其重定向到特定位置? (但仅限于此之后)
谢谢。
最佳答案
嗯,我不知道这是否是最好的方法,但我发现它非常简单;这就是我所做的,以防有人发现自己处于类似情况且具有类似设置。
在api/services/protocols/local.js
下,有一个名为exports.register
的方法;在该方法中,在调用 next()
之前,向 user
声明一个属性 isNew
,如下所示:
user.isNew = true;
然后,在AuthController
的callback
方法中,在controllers文件夹下,isNew
将可用(并设置为 true
)作为 req.user.isNew
,如果用户刚刚注册,这样,您就可以在 res.redirect
之前用它来执行您的逻辑叫。所以,像这样(在该方法内):
if(req.user.isNew) {
return res.redirect('/welcomePage');
}
return res.redirect('/dashboard');
就是这样。
关于javascript - 注册 Passport.js 和 Sails.js 后如何重定向到特定位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271717/