javascript - 如何对不同的路线使用相同的通行证策略?

标签 javascript node.js passport.js

假设我有这样的代码:

var api1 = require('api1');
var api2 = require('api2');
var app = express();
app.use('/api1', api1);
app.use('/api2', api2);

这是 api1 模块的代码:

var router = express.Router();
var options = {
    jwtFromRequest:ExtractJwt.fromAuthHeader(),
    secretOrKey:config.JWTSecret,
    algorithms:['HS256']
}

passport.use(new JwtStrategy(options, function(jwt_payload, verify) {
    //here I look for the user in database No.1
}));
router.post('/files', passport.authenticate('jwt', { session: false}), function(req, res) {
   //...
}
module.exports = router;

这是 api2 模块的代码:

var router = express.Router();
var options = {
    jwtFromRequest:ExtractJwt.fromAuthHeader(),
    secretOrKey:config.JWTSecret,
    algorithms:['HS256']
}

passport.use(new JwtStrategy(options, function(jwt_payload, verify) {
    //here I look for the user in database No.2
}));
router.post('/files', passport.authenticate('jwt', { session: false}), function(req, res) {
   //...
}
module.exports = router;

这行不通。在这两种情况下,如果我对“/api1/files”和“/api2/files”进行 POST,它将在数据库 No2 中查找用户。如果这个问题没有解决方案,使用 passport.js api,还有什么其他可能的方法来处理此类问题?

最佳答案

这样做的诀窍是使用命名策略语法。基本上,当您调用 passport.use() 时,您可以传递一个可选的第一个参数,告诉 passport 策略的名称,然后使用该名称(而不是默认名称)与 authenticate调用。因此,在您的情况下,您可以执行以下操作:

passport.use('jwt-1', new JwtStrategy(options, function(jwt_payload, verify) {
    //here I look for the user in database No.1
}));

router.post('/files', passport.authenticate('jwt-1', { session: false}), function(req, res) {
   //...
}

您的 api2 然后会将其策略命名为“jwt-2”或您认为有意义的任何名称。

关于javascript - 如何对不同的路线使用相同的通行证策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846711/

相关文章:

javascript - 有 2 个具有相同 id 的对象数组,但一个对象属性为 true,另一个属性为 false,如果属性为 false,如何删除这两个对象

javascript - 在 Node.js 中高级编写文件

node.js - koa-passport logout() 不是清除 session

javascript - 为此字符串 : Dec 3, 2005 创建正则表达式

javascript - 在 Node.js 中,变量的赋值

node.js - NodeJS、Express 和插件样式表

java - 在 Windows "no avatar-js in java.library.path"上使用 Avatar.js 在 Java 8 Nashorn 上运行 Node.js

node.js - COR 错误 : Google Oauth from React to Express (PassportJs validation)

javascript - nodejs - 如何强制用户在注册后完成个人资料?

javascript - 如何使用 jquery 或 javascript 将文本添加到文本区域