[JWT]校验用户身份信息失败,但依然能获取token的值,求解
1. 问题描述?
我在A服务器与B服务器上分别部署了一模一样的Laravel9项目代码,使用nginx做负载均衡,将接口请求轮流转发到两台服务器上,客户端访问网站域名后会先到达master服务器,然后由master服务器轮流转发请求到A与B服务器上处理PHP的逻辑
A与B的Linux版本号,PHP版本,nginx版本都是一模一样的,PHP代码文件里,.env文件中的JWT的秘钥、加密方式、有效时间都是一模一样的
现在的问题是
当我请求登录时,master服务器将登录请求转发给A服务器,生成一个JWT的token返回给客户,客户带着这个token做后续请求时,master服务器将后续请求转发给B服务器,在B服务器上第一次验证用户身份时是验证不通过的,但是可以拿到token的值
也就是 auth(‘user’)->check()的结果是false
但是auth(‘user’)->getToken()的结果是有值的
但是当再次发起请求时无论是A处理还是B处理都是可以成功校验用户token和身份信息的,只有在另一台服务器第一次校验token时会校验失败
但是两台服务器的各个配置版本,JWT版本、秘钥、加密方式都是一模一样的
一开始以为nginx转发的时候没有把request Headers里面的Authorization带过去,但后来发现不是这个问题(因为在校验不成功的时候我使用PHP把token打印出来了,说明拿到token了但是check校验不成功),各位大佬有什么思路可以支支招吗?
2. 运行环境
1). 当前使用的 Laravel 版本?
Laravel 9.18.0
2). 当前使用的 php/php-fpm 版本?
PHP 版本:8.0.22(两台服务器都是这个版本)
php-fpm 版本:8.0.22
3). 当前系统
centos7.6(两台服务器上都是这个版本)
4). 业务环境
JWT版本:”tymon/jwt-auth”: “1.0.x-dev”
#JWT的生效时间(分钟)
JWT_TTL=720(两台服务器都是一模一样的)
#JWT的秘钥
JWT_SECRET=暂时保密(两台服务器都是一模一样的)
#JWT的算法
JWT_ALGO=HS256(两台服务器都是一模一样的)
推荐文章: