我在我的sails.js应用中使用sails-generate-auth。我按照this教程将其与我的应用程序集成。当我致电localhost:1337/auth/local/register
时,它会路由callback
中的AuthController
行为。我的回调操作如下
callback: function (req, res) {
function tryAgain(err) {
//some validation
}
}
passport.callback(req, res, function (err, user, challenges, statuses) {
if (err || !user) {
return tryAgain(challenges);
}
req.login(user, function (err) {
if (err) {
return tryAgain(err);
}
//Return the access token created by passport instead of success.
res.send("Success");
});
});
我想将res.send("Success");
替换为护照创建的access token
。但是User.passport
此时似乎是空的。如何在此时获得用户的access token
?
答案 0 :(得分:3)
您获得的用户仅包含来自“用户收藏”的数据。其中包含用户名电子邮件和ID。护照' collection是一个单独的集合,包含散列密码,ID,userID(等于' User' Collection中的ID)和一个令牌。您需要在护照中搜索'相关用户的集合。这是algoritem:
passport.callback(req, res, function (err, user, challenges, statuses) {
if (err || !user) {
console.log(err);
return tryAgain(challenges);
}
req.login(user, function (err) {
if (err) {
console.log(err);
return tryAgain(err);
}
// Mark the session as authenticated to work with default Sails sessionAuth.js policy
req.session.authenticated = true
console.log(user);
var userID = user.id;
Passport.find({user: userID}, function(err, items){
if(err) return err;
console.log(items[0].accessToken);
// Make sure you dont give them any sensetive data
res.json({userData: user, token: items[0].accessToken});
});
// Upon successful login, send the user to the homepage were req.user
//res.redirect('/');
});
});
答案 1 :(得分:0)
如果你想使用sails内置会话,你不需要向客户端发送任何令牌,一切都在服务器端存储在会话中,并且由sid
绑定到用户(会话ID)cookie,因此您可以重定向到任何页面。
只要您拥有sessionAuth
政策,就会在访问受保护路线之前检查用户是否已登录。
如果你想使用像Json Web Tokens(JWT)这样的东西,sails-generate-auth / sails-auth do not support it yet