如何使用不同的密码创建两个不同的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验证令牌时)因为我的路由中需要两个不同的身份验证中间件。
我怎样才能实现这一目标?或者这样做有意义吗?
感谢您的帮助。
答案 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);
这样,您的管理员和用户将在路由器上使用指定的通行证规则。