Auth0和Graphql错误-TypeError:无法读取未定义的属性'publicKey'

问题描述 投票:0回答:1

我目前正在尝试通过Auth0为Graphql设置身份验证。我们面临的问题是在我们的身份验证Mutation中返回错误

\validateAndParseIdToken.js:25
      jwt.verify(idToken, key.publicKey, {
                              ^

TypeError: Cannot read property 'publicKey' of undefined

我们已经验证了idToken正在通过validateAndParseIdToken函数进行解码

validateAndParseIdToken.js

const jwksClient = require('jwks-rsa')
const jwt = require('jsonwebtoken')
const jwks = jwksClient({
  cache: true,
  rateLimit: true,
  jwksRequestsPerMinute: 1,
  jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json`
})

const validateAndParseIdToken = (idToken) => new Promise((resolve, reject) => {
  const { header, payload} = jwt.decode(idToken, {complete: true})
  if (!header || !header.kid || !payload) reject(new Error('Invalid Token'))
  jwks.getSigningKey(header.kid, (err, key) => {
    if (err) reject(new Error('Error getting signing key: ' + err.message))
    jwt.verify(idToken, key.publicKey, { algorithms: ['RS256'] }, (err, decoded) => {
      if (err) reject('jwt verify error: ' + err.message)
      resolve(decoded)
    })
  })
})

module.exports = validateAndParseIdToken
authenticate mutation -

const Mutation = {
  async authenticate(parent, { idToken }, ctx, info) {
    let userToken = null
    try {
      userToken = await validateAndParseIdToken(idToken)
    } catch (err) {
      throw new Error(err.message)
    }
    const auth0id = userToken.sub.split('|')[1]
    let user = await ctx.prisma.query.user({ where: { auth0id } }, info)
    if (!user) {
      user = createPrismaUser(ctx, userToken)
    }
    return user
  },

期望的流程是检查idToken,如果有效,然后检查数据库中是否存在该用户的用户,否则请创建该用户。

node.js express graphql auth0 express-graphql
1个回答
0
投票

我们实际上有一篇博客文章,深入探讨了使用Auth0和Graphql构建应用程序,在构建时可能值得一看。

https://auth0.com/blog/develop-modern-apps-with-react-graphql-apollo-and-add-authentication/

TypeError:无法读取未定义的属性'publicKey'

您是否已确认publicKey的值已正确传递?您是否在控制台或日志中看到任何错误?谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.