我目前正在开始使用 Sails.js,并且想将用户帐户添加到我的玩具应用程序中,因此我安装了“sails-auth”包,该包创建了一个基于 Passport 的用户身份验证系统。我可以通过发送 POST/user
创建新用户,并且可以使用 POST/auth/local
登录。
文档说:
Authenticate with the local strategy via a POST to /auth/local with params identifier (email) and password). This will also create a session. See passport.local for more.
但是,当我尝试GET/user/me
(它路由到应返回 session 中当前用户的 Controller 操作)时,页面反而给出空响应。为什么会发生这种情况?我是否缺少某种配置步骤?
顺便说一句,我没有更改或弄乱 sails-auth 包。它仍然是全新的; “me”操作如下所示:
me: function (req, res) {
res.ok(req.user);
}
编辑:我通过搜索 sails-auth 存储库中的问题找到了临时解决方法。您可以从 req.session.passport.user
获取字符串用户 ID,而不是从 req.user
获取用户对象。
最佳答案
您编写的 me
操作只会返回您作为用户参数传入的任何内容。 Sails 构建在 Express.js 之上,因此 req
是来自浏览器的请求,res
是对浏览器的响应。
很可能您正在将数据发送到 req
正文中的 me
操作,这就是为什么您的响应为空,简单地说,req.user
为空,因此响应为空。在这种情况下,您可以使用 req.body.user
访问它,您也可以尝试 var user = req.params();
为了进行调试并大致了解 req
和 res
对象的结构,我建议您始终以以下方式开始 sails (在开发中,而不是在生产中) 详细
标志。
sails lift --verbose
然后你可以这样做:
me: function(req, res){
sails.log.verbose(req);
res.ok(req.user);
}
并让它打印出整个 req 对象,以便您了解 req.user
中的内容。
通常情况下,您会进行数据库查找,因为 user
参数将是一个 ID。这意味着您的 me
函数可能看起来如下(显然取决于您的 dbc,它可能会非常不同):
me: function(req, res){
var userId = req.body.user;
User.find({'user_id': userId}.exec(function(err, user){
if(err){
//tell peeps there was an error
}else{
res.ok(user);
}
});
}
路由和请求对象的最佳调试:
'/*' : function(req, res, next) {
sails.log.verbose("method: ", req.method, "\n body: ", req.body, "\n url:", req.url);
next();
},
只需将其粘贴到路线模块的开头即可。
关于javascript - 为什么使用 sails-auth 验证后/user/me Controller 中 "req.user"始终为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214362/