我可以有条件地使用 passport-jwt 吗?
Can I use passport-jwt conditionally?
意思是,在我的应用程序中,我想检查客户端请求中是否存在 customId。如果是,我将使用我的自定义逻辑进行身份验证。
如果 customId 不存在,我想使用 passport-jwt 身份验证。
passport 在服务器启动时注册它的初始化方法。
我的具体问题是如何仅在 customId 不存在时使用 passport.authenticate。
非常感谢任何帮助。
是的,你可以,它只是中间件!这是您如何操作的示例,我没有 运行 此代码,因此它可能无法构建,但它显示了如何执行您想要的操作。
const express = require('express');
const passport = require('passport');
const passportJWT = require('passport-jwt');
// My express application where I setup routers, middleware etc
const app = express();
// Initialise passport
app.use(passport.initialize());
// Setup my passport JWT strategy, this just setups the strategy it doesn't mount any middleware
passport.use(new passportJWT.Strategy({
secretOrKey: '',
issuer: '',
audience: '',
}, (req, payload, done) => {
doSomeFancyAuthThingy(payload, (err, user) => {
done(err, user);
});
}));
// Now create some middleware for the authentication
app.use((req, res, next) => {
// Look to see if the request body has a customerId, in reality
// you probably want to check this on some sort of cookie or something
if (req.body.customerId) {
// We have a customerId so just let them through!
next();
} else {
// No customerId so lets run the passport JWT strategy
passport.authenticate('jwt', (err, user, info) => {
if (err) {
// The JWT failed to validate for some reason
return next(err);
}
// The JWT strategy validated just fine and returned a user, set that
// on req.user and let the user through!
req.user = user;
next();
});
}
});
如您所见,您要寻找的主要内容是我们创建中间件的位置。在这里,我们只是创建自己的中间件和 运行 检查(if 语句),如果失败,那么我们 运行 passport.authenticate 将触发我们在 passport.use
块上创建的策略.
这将允许您有条件地使用 Passport 进行任何类型的身份验证!
意思是,在我的应用程序中,我想检查客户端请求中是否存在 customId。如果是,我将使用我的自定义逻辑进行身份验证。 如果 customId 不存在,我想使用 passport-jwt 身份验证。
passport 在服务器启动时注册它的初始化方法。 我的具体问题是如何仅在 customId 不存在时使用 passport.authenticate。
非常感谢任何帮助。
是的,你可以,它只是中间件!这是您如何操作的示例,我没有 运行 此代码,因此它可能无法构建,但它显示了如何执行您想要的操作。
const express = require('express');
const passport = require('passport');
const passportJWT = require('passport-jwt');
// My express application where I setup routers, middleware etc
const app = express();
// Initialise passport
app.use(passport.initialize());
// Setup my passport JWT strategy, this just setups the strategy it doesn't mount any middleware
passport.use(new passportJWT.Strategy({
secretOrKey: '',
issuer: '',
audience: '',
}, (req, payload, done) => {
doSomeFancyAuthThingy(payload, (err, user) => {
done(err, user);
});
}));
// Now create some middleware for the authentication
app.use((req, res, next) => {
// Look to see if the request body has a customerId, in reality
// you probably want to check this on some sort of cookie or something
if (req.body.customerId) {
// We have a customerId so just let them through!
next();
} else {
// No customerId so lets run the passport JWT strategy
passport.authenticate('jwt', (err, user, info) => {
if (err) {
// The JWT failed to validate for some reason
return next(err);
}
// The JWT strategy validated just fine and returned a user, set that
// on req.user and let the user through!
req.user = user;
next();
});
}
});
如您所见,您要寻找的主要内容是我们创建中间件的位置。在这里,我们只是创建自己的中间件和 运行 检查(if 语句),如果失败,那么我们 运行 passport.authenticate 将触发我们在 passport.use
块上创建的策略.
这将允许您有条件地使用 Passport 进行任何类型的身份验证!