为什么在使用sails-auth进行validation之后,“req.user”总是在/ user / me控制器中为空?
我目前正在开始使用Sails.js,并且想要将用户账户添加到我的玩具应用程序中,所以我安装了创build基于Passport的用户authentication系统的“sails-auth”软件包。 我可以通过发送POST /user
来创build新POST /user
,我可以用POST /auth/local
login。
该文件说:
通过带有参数标识符(email)和密码的/ auth / local进行本地策略validation。 这也将创build一个会话。 看到更多的passport.local。
但是,当我尝试GET /user/me
,哪些路由到控制器操作应返回会话中的当前用户,而页面则会给出一个空的响应。 为什么发生这种情况? 是否有某种configuration步骤,我错过了?
顺便说一句,我没有改变或混淆sails-auth包。 它还是全新的; “我”的行为看起来像这样:
me: function (req, res) { res.ok(req.user); }
编辑 :我已经find了一个临时的解决方法,通过searchsails-auth回购问题。 您可以从req.user
中获取string用户标识,而不是从req.user
获取用户对象。
你写的me
行为只会返回你传递给用户的参数。 Sailsbuild立在Express.js之上,所以req
是来自浏览器的请求, res
是对浏览器的响应。
最有可能的是你发送数据给你的me
行动在req
正文这就是为什么你的回应是空白的,简单地说, req.user
是空的,所以响应是空的。 在这种情况下,你可以用req.body.user
来访问它,你也可以尝试var user = req.params();
对于debugging,通常只需要了解req
和res
对象的结构,我build议你总是用verbose
标志启动sails(在开发中,从不在生产中)。
sails lift --verbose
那么你可以这样做:
me: function(req, res){ sails.log.verbose(req); res.ok(req.user); }
让它打印出整个req对象,以便知道req.user
。
通常,虽然你会做一个数据库查询作为user
参数将是一个ID。 这意味着你的me
function可能会看起来(显然取决于你的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); } }); }
最佳debugging路由和请求对象:
'/*' : function(req, res, next) { sails.log.verbose("method: ", req.method, "\n body: ", req.body, "\n url:", req.url); next(); },
只需粘贴在你的路线模块的开始。