同一个应用程序中的多个passport-jwt策略

时间:2016-09-30 16:18:29

标签: javascript node.js

如何使用不同的密码创建两个不同的passport-jwt并使用它来验证两个不同的角色?

示例:

var passport_admin = require('../../node_modules/passport'); 
var passport_user = require('../../node_modules/passport'); 

require('../auth_layer/admin_jwt_auth')(passport_admin); 
require('../auth_layer/user_jwt_auth')(passport_user); 

app.post('/admin/profile',passport_admin.authenticate('jwt',{session:false}), business_admin.post_profile);

app.post('/user/profile',passport_user.authenticate('jwt',{session:false}), business_admin.post_profile);

当我执行上述操作时,它不起作用(401验证令牌时)因为我的路由中需要两个不同的身份验证中间件。

我怎样才能实现这一目标?或者这样做有意义吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

我遇到了与您完全相同的问题,但是经过大量的研究,试验和错误,我找到了解决该问题的自己的方法,并希望与您分享。 首先,在下面的语法中,将仅实施一个规则

    var passport_admin = require('../../node_modules/passport'); 
    var passport_user = require('../../node_modules/passport'); 

将使用的规则仅是最新,即 passport_user 。 为了解决这个问题,您需要转到passport.js api并创建两个具有不同名称的护照规则(在同一js文件中),如下所示

    passport.use('admin-rule',
    new JwtStrategy(opts, (...........) => {.........
    }));

    passport.use('user-rule',
    new JwtStrategy(opts, (...........) => {.........
    }));

然后,您要在管理语法上使用“ admin-rule”,与用户语法相同(使用“ user-rule”)。

    app.post('/admin/profile',passport_admin.authenticate('admin-rule'
    {session:false}), business_admin.post_profile);

这样,您的管理员和用户将在路由器上使用指定的通行证规则。