You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Postman在Laravel Sanctum中登出用户时触发错误

问题解决:Laravel Sanctum登出时出现参数类型错误

错误根源

这个错误和Postman设置、控制器返回代码无关,核心是路由定义错误:路由处理闭包/控制器方法被传入了Illuminate\Routing\Router实例,但代码期望的是Illuminate\Http\Request实例。

修复步骤

1. 检查并修正路由定义

打开你的路由文件(通常是routes/api.php),排查登出路由的写法:

  • 错误示例(参数类型错误):
// 错误:把Router当成了Request参数
Route::post('/logout', function(Illuminate\Routing\Router $router) {
    return response()->json(['message' => 'logged out']);
});
  • 正确的闭包路由写法:
use Illuminate\Http\Request;

Route::post('/logout', function(Request $request) {
    // 执行实际登出逻辑:删除当前用户的访问令牌
    $request->user()->currentAccessToken()->delete();
    return response()->json(['message' => 'logged out']);
})->middleware('auth:sanctum');
  • 如果你用控制器处理:
// 路由文件
use App\Http\Controllers\AuthController;

Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');

// AuthController.php
use Illuminate\Http\Request;

public function logout(Request $request)
{
    $request->user()->currentAccessToken()->delete();
    return response()->json(['message' => 'logged out']);
}

2. 关键注意事项

  • 必须为登出路由添加auth:sanctum中间件,否则无法获取当前登录用户
  • 确保代码中正确引入Illuminate\Http\Request类,不要导入错误的类
  • 之前的控制器代码仅返回消息,没有执行实际登出操作,需添加$request->user()->currentAccessToken()->delete();来删除令牌,完成真正的登出

内容的提问来源于stack exchange,提问作者quad que

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:08