为什么在使用sails-auth进行validation之后,“req.user”总是在/ user / me控制器中为空?

我目前正在开始使用Sails.js,并且想要将用户账户添加到我的玩具应用程序中,所以我安装了创build基于Passport的用户authentication系统的“sails-auth”软件包。 我可以通过发送POST /user来创build新POST /user ,我可以用POST /auth/locallogin。

该文件说:

通过带有参数标识符(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,通常只需要了解reqres对象的结构,我build议你总是用verbose标志启动sails(在开发中,从不在生产中)。
sails lift --verbose

那么你可以这样做:

 me: function(req, res){ sails.log.verbose(req); res.ok(req.user); } 

让它打印出整个req对象,以便知道req.user

通常,虽然你会做一个数据库查询作为user参数将是一个ID。 这意味着你的mefunction可能会看起来(显然取决于你的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(); }, 

只需粘贴在你的路线模块的开始。