Laravel Sanctum移动端API Ionic端登录报TOKEN MISMATCH如何解决
问题描述
我基于Laravel Sanctum搭建了供移动端应用调用的REST API,在Postman中测试所有接口均运行正常,但移动端开发人员在Ionic应用中调用登录接口时返回TOKEN MISMATCH错误,相关代码与测试信息如下:
API路由代码
Route::post('/register', [ApiController::class, 'register']); Route::post('/login', [ApiController::class, 'login']);
登录接口控制器实现
public function login(Request $request){ $fields = $request->validate([ 'email' => 'required|string|email|max:255', 'password' => 'required|string|min:8' ]); //validate login parameters //check email $user = User::where('email', $fields['email'])->first(); //check password if(!$user || !Hash::check($fields['password'], $user->password)){ return response([ 'message' => 'Invalid Credentials' ], 401); } $token = $user->createToken('myapptoken')->plainTextToken; //return $user->createToken($request->device_name)->plainTextToken; $response = [ 'user' => $user, 'token' =>$token, ]; return response($response, 201); }
相关测试信息
- 接口访问地址:https://findajob.ng/api/login
- 测试账号:邮箱
johndeo1@gmail.com,密码12345678
排查解决步骤
这个错误基本都是请求误触发了Web端的CSRF校验导致的,和Sanctum令牌生成逻辑本身无关,按以下顺序排查即可:
- 第一步:确认路由挂载的中间件组
打开app/Providers/RouteServiceProvider.php,确认routes/api.php是挂载在api中间件组下,而非web中间件组。web组默认开启全局CSRF校验,未携带合法CSRF令牌就会直接返回TOKEN MISMATCH。Postman默认不会自动存储携带目标站点的cookie,所以本地测试不会触发这个校验;Ionic的WebView如果之前访问过同域名页面、自动带上了存储的cookie,就会直接命中CSRF拦截规则,根本走不到你写的登录逻辑里。
正确的路由挂载配置参考:Route::middleware('api') ->prefix('api') ->group(base_path('routes/api.php')); - 第二步:配置CSRF排除规则(架构调整成本高时用)
如果因为项目特殊架构必须把API路由放在web组下,打开app/Http/Middleware/VerifyCsrfToken.php,把API路径加入排除名单:protected $except = [ '/api/*', ]; - 第三步:检查Ionic端请求配置
确认Ionic发起请求时满足以下要求:- 请求头不要携带
X-XSRF-TOKEN、X-CSRF-TOKEN这类CSRF相关字段 - 不要配置请求自动携带同域/跨域cookie,纯接口令牌认证不需要cookie参与
- 必须在请求头设置
Accept: application/json,避免Laravel把请求判定为Web端页面请求
- 请求头不要携带
- 第四步:核对Sanctum配置项
打开config/sanctum.php,确认SPA认证的状态域配置没有包含移动端接口域名,同时.env里的SANCTUM_STATEFUL_DOMAINS不要填写当前API域名,留空或者只配置实际需要走SPA Cookie认证的前端域名即可。
校验技巧:改完配置后如果还是报错,可以直接在
VerifyCsrfToken中间件里加日志打印,确认触发CSRF拦截的请求路径,排查是不是有其他全局中间件把API请求路由到了Web校验流程里。
内容的提问来源于stack exchange,提问作者Bernice Golomo
相关产品推荐
相关产品推荐

