如何在Sails.js中使用jsonwebtoken获取当前用户?

mat*_*lla 5 sails.js json-web-token

几周前我一直在使用Sails,我来自Rails,我没有任何使用Node.js的经验.

现在我正在尝试使用jsonwebtoken进行强大的令牌身份验证. https://github.com/auth0/node-jsonwebtoken

我按照本指南http://thesabbir.com/how-to-use-json-web-token-authentication-with-sails-js/,一切正常.我可以进行注册,登录,然后正确使用令牌进行不同的操作.

现在,有一些我想使用登录用户的动作,比如设计current_user助手.例如,在创建注释时,此注释应属于当前用户.

使用Sabbir Ahmed指南,在isAuthorized.js策略的第33行中,令牌被解密,因此我可以从那里获取当前用户ID.

所以,我的问题是,什么应该是获得当前用户的最佳方式,并能够在以后的某些控制器中使用它?例如,我尝试过类似的东西:

# isAuthorized.js line 34, after getting decrypted token
User.findOne({id: token.id}).exec(function findOneCB(err, found){
    currentUser = found;
});
Run Code Online (Sandbox Code Playgroud)

但是,通过这种方式,因为这是异步操作,所以我无法在控制器中使用此currentUser.

我想存储当前用户,以便以后能够在某个控制器中使用它,而不必在每个控制器中重复相同的代码,例如帮助程序或服务.

MjZ*_*Zac 4

诀窍在于你放置next(). 由于您正在进行异步调用,因此只有在数据库操作完成后,控制权才应转移到下一个策略/控制器。

您应该将该策略修改为:

User.findOne({id: token.id}).exec(function findOneCB(err, found){
    if(err) next(err);
    req.currentUser = found;
    next();
});
Run Code Online (Sandbox Code Playgroud)

并且您应该能够isAuthorized通过以下方式访问使用策略的控制器中的用户详细信息req.currentUser