首页 > 解决方案 > JWT 功能在本地有效,但在 heroku 上无效

问题描述

所以我目前正在用 nodejs、express、mongodb、jwt 和 hbs 构建一个 todo 应用程序。我让一切都在本地工作,但是当我最终将我的网站部署到 heroku 时,我要么得到一个无法识别的令牌,要么得到一个内部服务器错误(错误代码 500),换句话说,一个“JWT 无效令牌错误”。那么为什么它在部署时不工作,但在本地工作?我该如何解决它。

使用此标记时,令牌返回未定义

const authHeader = req.headers["cookie"].split(" ")[1]
console.log(authHeader)
if(authHeader !== undefined) {
    token = authHeader.substring(6)
    console.log(token)
}

但没有它,只是使用它,我得到了整个令牌,但是一个 JWT 无效令牌错误。

const authHeader = req.headers["cookie"]
console.log(authHeader)
if(authHeader !== undefined) {
    token = authHeader.substring(6)
    console.log(token)
}

标签: node.jsexpressherokujwtauthorization

解决方案


我今天遇到了完全相同的问题,所以我将在这里分享我的努力:

  • 我的 env vars 引用了我的 jwt 机密,在 heroku env 上正确设置(您可以通过控制台记录一个 env var 并查看它在终端上输出来验证这一点heroku logs --tail
  • 我在用户登录和注册时返回了一个有效的 jwt(您可以使用出色的https://jwt.io/调试器进行验证)

那么发生了什么事?在我的 auth 中间件处理 jwt 解码部分的 try/catch 块中,我安慰了我的错误,我发现......我在 Heroku 上部署的应用程序与我的时区不同(部署在美国我住在欧洲)=>

由于 TZ,令牌过期错误

我不知道您的问题是否与此有关,但可能值得检查您的令牌到期设置和您部署的应用程序的时区设置


推荐阅读