javascript - 为什么使用 sails-auth 验证后/user/me Controller 中 "req.user"始终为空?

标签 javascript node.js sails.js passport.js

我目前正在开始使用 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();

为了进行调试并大致了解 reqres 对象的结构,我建议您始终以以下方式开始 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/

相关文章:

javascript - Webpack:使用 ng-include 的 require

Javascript:将函数指针放入对象中?

javascript - 调用特权函数的父实现

node.js - 无法理解为什么 try and catch 在 mongoose 中没有按预期工作

javascript - SailsJS 测试进程是否已在运行

javascript - 在 Web 上运行的 Flutter 应用程序失败,错误为 : Only JS interop members may be 'external'

node.js - 我可以将 node.js 与 Objective-J 一起使用吗?

node.js - 在Elasticsearch中使用nodejs创建索引时出错

node.js - Node 获取所需父文件的路径

mongodb - Sailsjs 查找未设置字段的位置