【发布时间】:2019-10-27 10:45:16
【问题描述】:
我不明白为什么在passport.authenticate 函数之后需要(req, res, next)
用这个和express,我跟着一个教程,没有把这段解释得太清楚
PS:一切正常,我只是不明白为什么需要这样做
const passport = require('passport')
module.exports = (req, res, next) => {
passport.authenticate('jwt', (err, user) => {
if (err || !user || user.isAdmin !== true) {
res.status(403).send({
message: 'Request blocked, only administrators'
})
} else {
req.user = user
next()
}
})(req, res, next)
}
作为中间件的函数调用
app.get('/admin', isAdmin, (req, res) => {
res.send({
message: 'You are an admin'
})
})
护照策略配置
passport.use(
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: config.jwtSecret
}, async (jwtPayload, done) => {
try {
const user = await User.findOne({
where: {
id: jwtPayload.id
}
})
if (!user) {
return done(new Error(), false)
}
return done(null, user)
} catch (err) {
return done(new Error(), false)
}
})
)
PSS:我必须为用户身份验证创建另一个名为 isUser.js 的文件,如果我想将它们放在同一个文件中并要求它们一样,我应该怎么做
const Auth = require('./Auth')
Auth.isUser
Auth.isAdmin
我试过了,但我不知道如何使用这种类型的函数:(
【问题讨论】:
标签: node.js express authentication passport.js passport-jwt