为什么在使用 sails-auth 验证后 "req.user" 在 /user/me 控制器中总是空的?
Why "req.user" always empty in the /user/me controller after validation with sails-auth?
我目前正在开始使用 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
时,它会路由到应该 return 会话中当前用户的控制器操作,但页面却给出空响应。为什么会这样?是否缺少某种配置步骤?
顺便说一句,我没有更改或乱用 sails-auth 包。它仍然是全新的; "me" 操作如下所示:
me: function (req, res) {
res.ok(req.user);
}
编辑:我通过搜索 sails-auth 存储库中的问题找到了一个临时解决方法。您可以从 req.session.passport.user
获取字符串用户 ID,而不是从 req.user
获取用户对象。
您所写的 me
操作只会 return 无论您作为用户参数传入什么。 Sails 建立在 Express.js 之上,因此 req
是来自浏览器的请求,而 res
是对浏览器的响应。
很可能您将数据发送到 req
正文中的 me
操作,这就是为什么您的响应为空,简单地说,req.user
为空,因此响应为空的。在那种情况下,您可以使用 req.body.user
访问它,您也可以尝试 var user = req.params();
为了调试和大致了解 req
和 res
对象的结构,我建议您始终使用 [=23= 开始航行(在开发中,从不在生产中) ]旗帜。
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();
},
只需将其粘贴到路线模块的开头即可。
我目前正在开始使用 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
时,它会路由到应该 return 会话中当前用户的控制器操作,但页面却给出空响应。为什么会这样?是否缺少某种配置步骤?
顺便说一句,我没有更改或乱用 sails-auth 包。它仍然是全新的; "me" 操作如下所示:
me: function (req, res) {
res.ok(req.user);
}
编辑:我通过搜索 sails-auth 存储库中的问题找到了一个临时解决方法。您可以从 req.session.passport.user
获取字符串用户 ID,而不是从 req.user
获取用户对象。
您所写的 me
操作只会 return 无论您作为用户参数传入什么。 Sails 建立在 Express.js 之上,因此 req
是来自浏览器的请求,而 res
是对浏览器的响应。
很可能您将数据发送到 req
正文中的 me
操作,这就是为什么您的响应为空,简单地说,req.user
为空,因此响应为空的。在那种情况下,您可以使用 req.body.user
访问它,您也可以尝试 var user = req.params();
为了调试和大致了解 req
和 res
对象的结构,我建议您始终使用 [=23= 开始航行(在开发中,从不在生产中) ]旗帜。
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();
},
只需将其粘贴到路线模块的开头即可。