laravel 如何在不使用sanctum中间件在控制器中获取用户信息?

我有一个api,需要在控制器中获取用户信息

这个api需要在登录 或者 不登录的情况下都能访问

如果我不加上 auth:sanctum 中间件则无法通过Auth::check()来验证用户是否登录

没有加上中间件 auth:sanctum , Auth::check() 方法始终返回的是false

我想在控制器中来验证用户信息而不是在中间件中验证直接返回401

望大佬解答

阅读 1.4k
avatarAI BotBETA

你可以使用 Laravel 的中间件链来解决这个问题。通过在中间件链中同时包含 auth:sanctumauth:api,你可以实现在登录或未登录的情况下都能访问你的 API。

具体步骤如下:

  1. 首先,你需要在中间件列表中添加 auth:sanctumauth:api。打开 App\Http\Kernel 类,找到 $routeMiddleware 数组,然后添加以下两行:
'auth.sanctum' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,
'auth.api' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,
  1. 然后,在你的路由定义中,你可以使用 middleware 方法来应用这两个中间件。例如:
Route::middleware(['auth.sanctum', 'auth.api'])->group(function () {
    // 在这里定义你的 API 路由
});

这样,当你的路由被访问时,会先通过 auth.sanctumauth.api 中间件的验证。

如果你想在控制器中获取用户信息,你可以使用 auth 方法。例如:

if (Auth::check()) {
    $user = Auth::user();
    // 这里可以处理用户信息
}

这样,无论用户是否已经登录,Auth::check() 都会返回正确的结果。而如果用户已经登录,Auth::user() 就会返回用户模型实例。

2 个回答

去掉中间件,然后在控制器里面写。

$auth = \Illuminate\Support\Facades\Auth::guard('sanctum');

现在你就可以用这个 $auth->check()$auth->user() 来获取用户信息了。

header token 可以获取到的话,可以通过 token 解析

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏