我有一个api,需要在控制器中获取用户信息
这个api需要在登录 或者 不登录的情况下都能访问
如果我不加上 auth:sanctum 中间件则无法通过Auth::check()来验证用户是否登录
没有加上中间件 auth:sanctum , Auth::check() 方法始终返回的是false
我想在控制器中来验证用户信息而不是在中间件中验证直接返回401
望大佬解答
我有一个api,需要在控制器中获取用户信息
这个api需要在登录 或者 不登录的情况下都能访问
如果我不加上 auth:sanctum 中间件则无法通过Auth::check()来验证用户是否登录
没有加上中间件 auth:sanctum , Auth::check() 方法始终返回的是false
我想在控制器中来验证用户信息而不是在中间件中验证直接返回401
望大佬解答
你可以使用 Laravel 的中间件链来解决这个问题。通过在中间件链中同时包含 auth:sanctum
和 auth:api
,你可以实现在登录或未登录的情况下都能访问你的 API。
具体步骤如下:
auth:sanctum
和 auth:api
。打开 App\Http\Kernel
类,找到 $routeMiddleware
数组,然后添加以下两行:'auth.sanctum' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,
'auth.api' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,
middleware
方法来应用这两个中间件。例如:Route::middleware(['auth.sanctum', 'auth.api'])->group(function () {
// 在这里定义你的 API 路由
});
这样,当你的路由被访问时,会先通过 auth.sanctum
和 auth.api
中间件的验证。
如果你想在控制器中获取用户信息,你可以使用 auth
方法。例如:
if (Auth::check()) {
$user = Auth::user();
// 这里可以处理用户信息
}
这样,无论用户是否已经登录,Auth::check()
都会返回正确的结果。而如果用户已经登录,Auth::user()
就会返回用户模型实例。
6 回答5k 阅读✓ 已解决
4 回答13.4k 阅读✓ 已解决
15 回答6.9k 阅读
5 回答7.8k 阅读✓ 已解决
4 回答7.3k 阅读
2 回答7.5k 阅读✓ 已解决
2 回答3.3k 阅读✓ 已解决
去掉中间件,然后在控制器里面写。
现在你就可以用这个
$auth->check()
和$auth->user()
来获取用户信息了。