我有一个使用Laravel / Lumen及其Auth Guard JWT令牌登录的应用程序。
我向
发送请求 http://myserver.com/authenticate
然后我得到一个令牌。
然后,当我在后续请求中使用此令牌时
http://myserver.com/users
标头中带有令牌
Authorization : Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJjbG96ZXJ0b29sc1YyIiwianRpIjoiNTBiMjE1MjllZGIxMmI4OGJlYTJmOTQxMTViNjc2NmYiLCJpYXQiOjE1MzY1NTU3NzEsIm5iZiI6MTUzNjU1NTc3NiwiZXhwIjoxNTM2NTcwOTc2LCJkYXRhIjp7ImVtYWlsIjoia3lsZWtvb3BtYW5AZ21haWwuY29tIiwiYXZhdGFyIjoiIiwiZmlyc3RfbmFtZSI6Ikt5bGUiLCJsYXN0X25hbWUiOiJLb29wbWFuIiwiaWQiOjMzNH0sInN1YiI6MzM0fQ.p20K56BW0c_J-xlk9gV6wDFafxgNuKUOmgk-4ExKhh9qPw79R0bpm-QbnVQFtYlatB_MjLYK1NdUt5GlGaOE9w
显然,请求通常返回200(无论如何在我的本地服务器上) 但是,在我的生产服务器上,带有提供的令牌的所有后续请求都返回401 /未经授权
两台服务器上的所有设置都相同。
我在生产服务器和本地服务器上的.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
我的假设是它与到期时间和/或服务器时间有关。
就像我认为令牌返回已经过期一样,因此在后续请求中,令牌无效。
我认为这是问题所在吗?我该如何修复/测试呢?
答案 0 :(得分:0)
您可以访问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...
}
};