Laravel 7 部署至PHP7.4.13后Passport创建令牌报解析错误怎么办?
项目部署运行异常记录
基础环境与触发场景
- 项目在本地开发环境运行完全正常,部署到服务器后触发运行报错
- 项目使用框架版本:Laravel 7
- 服务器PHP版本:7.4.13
- 报错触发节点:OTP登录验证通过后,执行
createToken方法生成访问令牌的逻辑环节
详细报错信息
ParseError: syntax error, unexpected 'Parser' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in file /var/www/html/laravel/vendor/lcobucci/jwt/src/Configuration.php on line 22
报错截图展示的内容与上述文字信息完全一致
对应业务逻辑说明
当前接口实现完整OTP验证流程:
- 从请求参数中提取两个核心字段:登录手机号对应参数名
loginId、用户输入的OTP验证码对应参数名password - 组装登录凭证调用系统认证逻辑,若认证失败,返回OTP错误提示与状态码0
- 若认证通过,调用
createToken生成访问令牌,向客户端返回用户信息、访问令牌、登录成功提示与状态码1
业务代码实现:
public function verifyOtp(Request $request) { $phoneno = $request->input('loginId'); $enteredOtp = $request->input('password'); $loginData = [ 'login_id' => $phoneno, 'password' => $enteredOtp ]; // dd($loginData); if (!auth()->attempt($loginData)) { return response([ 'message' => 'OTP incorrect!', 'status'=>0 ]); } else { // dd("Here"); $accessToken = auth()->user()->createToken('authToken')->accessToken; return response([ 'user' =>auth()->user(), 'access_token' =>$accessToken, 'message'=>"Successfully login", 'status'=>1 ]); } }
问题根因与排查方向
该报错属于典型的运行环境/依赖版本不匹配问题,可按以下顺序排查解决:
- 核对Web服务实际调用的PHP版本:检查Nginx/Apache配置中关联的PHP-FPM版本,避免出现配置文件标注PHP7.4.13,但实际运行使用的PHP版本低于7.4的情况(PHP7.4以下版本不支持类属性强类型声明语法,会直接触发该ParseError)
- 核对依赖安装流程:本地开发的依赖版本是根据
composer.lock锁定的适配版本,服务器部署时如果执行composer update而非composer install,会拉取4.x系列的最新版lcobucci/jwt,该版本与Laravel 7配套的Passport 9.x存在兼容问题。解决方式为删除服务器上的vendor目录、执行composer install --no-dev --optimize-autoloader严格按照锁文件安装对应版本的依赖 - 若完成上述步骤后仍报错,清理服务器OPcache缓存,避免旧的语法解析缓存引发的文件加载异常
内容的提问来源于stack exchange,提问作者aungsoeoo
相关产品推荐
相关产品推荐

