【问题标题】:Multiple passport-jwt strategy in the same app同一个应用程序中的多个passport-jwt策略
【发布时间】:2021-01-13 02:38:36
【问题描述】:

如何使用不同的密码创建两个不同的 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),因为我的路由中需要两个不同的身份验证中间件。

我怎样才能做到这一点?或者这样做有意义吗?

感谢您的帮助。

【问题讨论】:

标签: javascript node.js


【解决方案1】:

我和你有同样的问题,但经过大量的研究、试验和错误,我找到了自己的方法来解决这个问题,并想与你分享。 首先在下面的语法中,只会实现一个规则

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

将使用的规则只有 latest,即 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);

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

【讨论】:

    【解决方案2】:

    此解决方案允许您对两种策略使用相同的 url,只需为其命名即可。

    https://github.com/mikenicholson/passport-jwt/issues/182

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2020-10-21
      • 2020-06-09
      • 2018-09-14
      • 2019-05-21
      • 2018-05-09
      • 2018-03-05
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多