gpt4 book ai didi

javascript - 获取用户,但不使用 Express Passport + JWT 中间件返回 401

转载 作者:行者123 更新时间:2023-11-30 20:47:33 25 4
gpt4 key购买 nike

我正在使用 Passport 验证对我的快速 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,当使用此 token 向 /graphql 发出请求时,一切正常。但是,未经身份验证的请求(没有 token )返回 401。我想做的不同是在 所有 请求上使用 checkToken 中间件,分配 req .user 到经过身份验证的用户数据或 false。然后我会在别处处理任何授权。

当我在没有 token 的情况下发出请求时,我没有在控制台上看到“使用 JWT 策略”日志,因此中间件甚至没有运行。

有什么想法吗?

最佳答案

好的,我在发布后不久就想通了。对于任何带着同样问题来到这里的人——解决方案不是使用 passport-jwt 来实现这一点,而是使用底层的 jsonwebtoken

我的工作中间件现在看起来像:

const jwt = require('jsonwebtoken')
const PassportJwt = require('passport-jwt')

const getUserFromToken = (req, res, next) => {
const token = PassportJwt.ExtractJwt.fromAuthHeaderWithScheme('Bearer')(req)
jwt.verify(token, jwtSecret, (err, decoded) => {
if (err) {
req.user = false
next()
return
}
req.user = decoded
next()
})
}

app.use(getUserFromToken)
app.use('/graphql', graphqlHTTP(graphQLConfig))


// Elsewhere, in my GraphQL resolvers

const userQuery = (obj, args, request, info) => {
// ^^^^^^^
// I've also seen this parameter referred to as 'context'
console.log(request.user) // either 'false' or the serialized user data

if (req.user) {
// do things that this user is allowed to do...
} else {
// user is not logged in, do some limited things..
}
}

关于javascript - 获取用户,但不使用 Express Passport + JWT 中间件返回 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48537443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com