如何在使用 passport.js 进行身份验证时从其余代码访问 Passport 'done' 函数?
How to access Passport 'done' function from rest of the code while authenticating using passport.js?
我正在尝试使用 passport.js 和 passport_jwt 策略在我的 API 中实施身份验证。代码附在下面
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const opts = {}
const User = require('../models/user_model')
const dotenv = require('dotenv')
module.exports = function(passport) {
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = process.env.JWT_SECRET;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findById(jwt_payload._id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
这里我已经通过 done 函数验证成功。对于我的 post 路由,我使用 passport.authenticate 作为路由中间件,如下所示。
app.use('/api/v1/posts', passport.authenticate('jwt', { session : false }), postRoutes)
现在的问题是如何在创建 post 路由时访问之前在 done 函数上发送的用户?非常感谢。
您可以在 postRoutes 方法中访问 user,代码如下:
exports.postRoutes = async (req, res) => {
console.log('req.user =====>', req.user);
res.status(200).send({ user: req.user })
};
我正在尝试使用 passport.js 和 passport_jwt 策略在我的 API 中实施身份验证。代码附在下面
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const opts = {}
const User = require('../models/user_model')
const dotenv = require('dotenv')
module.exports = function(passport) {
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = process.env.JWT_SECRET;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findById(jwt_payload._id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
这里我已经通过 done 函数验证成功。对于我的 post 路由,我使用 passport.authenticate 作为路由中间件,如下所示。
app.use('/api/v1/posts', passport.authenticate('jwt', { session : false }), postRoutes)
现在的问题是如何在创建 post 路由时访问之前在 done 函数上发送的用户?非常感谢。
您可以在 postRoutes 方法中访问 user,代码如下:
exports.postRoutes = async (req, res) => {
console.log('req.user =====>', req.user);
res.status(200).send({ user: req.user })
};