【发布时间】:2018-07-10 06:49:27
【问题描述】:
我正在使用护照验证对我的 express API 的调用。我有一个非常标准的设置:
/* Passport Setup */
const jwtOptions = {
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('Bearer'),
secretOrKey: config.auth.passport.key,
}
passport.use(
'jwt',
new JWT.Strategy(jwtOptions, (payload, done) => {
console.log('Using JWT Strategy')
User.findOne({ email: payload.email }, (err, user) => {
if (err) {
return done(err, false)
}
if (user) {
done(null, user)
} else {
done(null, false)
}
})
}),
)
/* Middleware */
const checkToken = passport.authenticate('jwt', { session: false })
const logAuthInfo = (req, res, next) => {
console.log(req.headers)
console.log(req.user)
}
/* Routes */
app.use(passport.initialize())
app.use('/graphql', checkToken, logAuthInfo, graphqlHTTP(graphQLConfig))
// other REST routes, including login
我的登录路由返回一个 JWT,当使用此令牌向 /graphql 发出请求时,一切正常。但是,未经身份验证的请求(没有令牌)返回 401。我想做的不同是在 all 请求上使用 checkToken 中间件,将 req.user 分配给经过身份验证的用户数据或false。然后我会在其他地方处理任何授权。
当我在没有令牌的情况下发出请求时,我看不到控制台中的“使用 JWT 策略”日志,因此中间件甚至没有运行。
有什么想法吗?
【问题讨论】:
标签: javascript express jwt passport.js