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.
我想存储当前用户,以便以后能够在某个控制器中使用它,而不必在每个控制器中重复相同的代码,例如帮助程序或服务.
诀窍在于你放置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
| 归档时间: |
|
| 查看次数: |
3077 次 |
| 最近记录: |