Sails.js : 如何在用户注册后使用 sails-generate-auth return 访问令牌?
Sails.js : How to return access token after user registration using sails-generate-auth?
我正在使用 sails-generate-auth in my sails.js app. I followed this 教程将其与我的应用程序集成。当我调用 localhost:1337/auth/local/register
时,它会路由到我在 AuthController
中的 callback
操作。我的回调动作如下
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");
});
});
我想用 passport 创建的 access token
替换 res.send("Success");
。但是 User.passport
此时似乎为空。此时如何获取用户的access token
?
如果您想使用 sails 内置会话,则无需向客户端发送任何令牌,所有内容都存储在服务器端会话中,并通过 sid
(session id) cookie,因此您可以重定向到任何页面。
只要您有 sessionAuth
策略,它就会在访问您的受保护路由之前检查用户是否已登录。
如果您想使用类似 Json Web 令牌 (JWT) 的东西,sails-generate-auth / sails-auth do not support it yet
您获得的用户仅包含来自 'User Collection' 的数据,其中包含用户名电子邮件和 ID。 'Passport' 集合是一个单独的集合,其中包含散列密码、ID、用户 ID(等于 'User' 集合中的 ID)和令牌。您需要在 'passport' 集合中搜索相关用户。这是算法:
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('/');
});
});
我正在使用 sails-generate-auth in my sails.js app. I followed this 教程将其与我的应用程序集成。当我调用 localhost:1337/auth/local/register
时,它会路由到我在 AuthController
中的 callback
操作。我的回调动作如下
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");
});
});
我想用 passport 创建的 access token
替换 res.send("Success");
。但是 User.passport
此时似乎为空。此时如何获取用户的access token
?
如果您想使用 sails 内置会话,则无需向客户端发送任何令牌,所有内容都存储在服务器端会话中,并通过 sid
(session id) cookie,因此您可以重定向到任何页面。
只要您有 sessionAuth
策略,它就会在访问您的受保护路由之前检查用户是否已登录。
如果您想使用类似 Json Web 令牌 (JWT) 的东西,sails-generate-auth / sails-auth do not support it yet
您获得的用户仅包含来自 'User Collection' 的数据,其中包含用户名电子邮件和 ID。 'Passport' 集合是一个单独的集合,其中包含散列密码、ID、用户 ID(等于 'User' 集合中的 ID)和令牌。您需要在 'passport' 集合中搜索相关用户。这是算法:
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('/');
});
});