php - Laravel/Lumen Auth JWT 令牌在后续请求中无效,它可能已过期吗?
问题描述
我有一个使用 Laravel/Lumen 及其 Auth 保护 JWT 令牌进行登录的应用程序。
我向
http://myserver.com/authenticate
我得到一个令牌作为回应。
然后当我在后续请求中使用此令牌时
http://myserver.com/users
带有标头中的令牌
Authorization : Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJjbG96ZXJ0b29sc1YyIiwianRpIjoiNTBiMjE1MjllZGIxMmI4OGJlYTJmOTQxMTViNjc2NmYiLCJpYXQiOjE1MzY1NTU3NzEsIm5iZiI6MTUzNjU1NTc3NiwiZXhwIjoxNTM2NTcwOTc2LCJkYXRhIjp7ImVtYWlsIjoia3lsZWtvb3BtYW5AZ21haWwuY29tIiwiYXZhdGFyIjoiIiwiZmlyc3RfbmFtZSI6Ikt5bGUiLCJsYXN0X25hbWUiOiJLb29wbWFuIiwiaWQiOjMzNH0sInN1YiI6MzM0fQ.p20K56BW0c_J-xlk9gV6wDFafxgNuKUOmgk-4ExKhh9qPw79R0bpm-QbnVQFtYlatB_MjLYK1NdUt5GlGaOE9w
该请求显然通常返回 200,(无论如何在我的本地服务器上)但是,在我的生产服务器上,所有带有提供的令牌的后续请求都返回 401 / Unauthorized
两台服务器上的所有设置都相同。
我在生产服务器和本地服务器上的 .env 中都有这个。
JWT_KEY=yUyg2oo3M2N0Lf0CnsbG1ztsL1ovA70K
JWT_EXPIRE_AFTER=15200
JWT_ISSUER=mysite
JWT_ID_FIELD=id
JWT_NBF_DELAY=25
DB_TIMEZONE=+00:00
APP_TIMEZONE=UTC
我的假设是它与到期和/或服务器时间有关。
就像我认为令牌回来已经过期一样,因此在后续请求中它是无效的。
我认为这是问题所在是否正确?我该如何修复它/测试它?
解决方案
您可以访问https://jwt.io并将您的令牌粘贴到编码字段中以获取过期日期,然后在开发人员控制台中检查
const currentTime = Date.now() / 1000
if( exp < currentTime) {
// is expired
}
我的代码中有这样的东西:
const checkExpiredJwtDate = token => {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const jwtObject = JSON.parse(window.atob(base64))
const currentTime = Date.now() / 1000;
if (jwtObject.exp < currentTime) {
// is expired...
}
};
推荐阅读
- r - 如何填充与另一列相关的列中的缺失值?
- javascript - 在画布上抚摸文本
- linux - 每次尝试构建 Docker Ubuntu 16:04 映像时出现错误请求 (400) 消息
- typescript - 采用任何类型但不清除参数的形状信息的函数
- ruby-on-rails - Heroku 中的 Rails 外键问题与 Postgres 一起迁移
- python-3.x - 使用预先生成的输入自动化 python argparse 脚本
- python - Python 尝试从列表中的列表中随机选择值导致 TypeError: list expected at most 1 argument, got 4
- java - 休息 DSL 路由 - 由于不允许同一端点的多个使用者而无法启动路由
- c++ - 为什么在输入 n 之前将数组的大小声明为 n,第一次有效,第二次无效?
- laravel - Laravel Dusk:使用 vue-fragment 时元素不可交互