October CMS vdomah JWT插件生成令牌无法被Flutter端请求路由识别
排查步骤
1. 后端中间件配置校验
- vdomah/jwt-auth 插件默认封装了适配October CMS的中间件,不要直接使用Tymon原生的
GetUserFromToken中间件,替换成插件自带的jwt.auth中间件即可,修改路由代码:
Route::post('storephoto', function (Work $Work, Request $request) { ... $Work->save(); })->middleware('jwt.auth');
- 检查October CMS的
.env文件是否正确配置了JWT_SECRET,确保值和你生成令牌时用的签名密钥一致,没有被缓存,执行php artisan config:clear清理配置缓存。
2. 请求头传递校验
- 你在浏览器测GET路由返回
token_not_provided属于正常现象,因为浏览器默认不会自动携带Authorization请求头,你需要用接口测试工具模拟请求,手动在请求头加上Authorization: Bearer 你的令牌值,先确认后端接口本身可以正常识别令牌。 - 排查服务端配置是否丢弃了Authorization头:如果用了Nginx/Apache反向代理,需要显式配置保留Authorization头,Nginx参考配置:
add_header Access-Control-Allow-Headers Authorization; proxy_pass_header Authorization;
- Flutter侧请求头可以显式指定content-type,避免POST表单请求时头被覆盖:
headers: { 'Authorization': 'Bearer $token', 'Content-Type': 'application/x-www-form-urlencoded', },
3. 令牌本身有效性校验
- 把你打印出来的令牌复制到本地JWT解码工具,检查三个核心部分:
- 头部的alg算法是不是和后端配置的签名算法一致(默认是HS256)
- 载荷部分的iss、exp等声明是不是符合后端配置,exp有没有过期
- 签名部分用后端的JWT_SECRET重新计算,确认和令牌第三部分一致,排除签名错误问题
4. 插件特殊配置校验
- vdomah的JWT插件默认会从三个位置取令牌:请求头Authorization、请求参数
token、Cookie,你可以临时修改后端路由代码先打印所有请求头,确认令牌是不是确实传递到了后端:
Route::post('storephoto', function (Request $request) { // 临时打印请求头排查 dd($request->headers->all()); })->middleware('jwt.auth');
如果打印出来没有Authorization头,就可以定位是服务器配置丢弃了头,不是令牌本身的问题。
内容的提问来源于stack exchange,提问作者Giuseppes85
相关产品推荐
相关产品推荐

