php 如何选择Laravel Sanctum进行身份验证?

f8rj6qna  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(131)

我正在使用Laravel Sanctum对用户进行身份验证。我想有一个可以访问的客人和登录用户的路线。已登录的用户在Authorization标头中发送API令牌。
我试过在没有身份验证的情况下创建路由,但这样我就看不到登录的用户。

Route::get('noauth', function() {
  return Auth::check();
});

GET /noauth with auth header returns false, user is not logged in
GET /noauth without auth header returns false, user is not logged in
我也试过使用auth:sanctum中间件,但这样访客就无法访问页面。

Route::get('yesauth', function() {
  return Auth::check();
})->middleware('auth:sanctum');

GET /yesauth with auth header returns true, the user is logged in
GET /yesauth withouth auth header returns 401, unauthorized
解决方案应该返回带有auth头的true,以及不带auth头的false。

zzwlnbp8

zzwlnbp81#

Auth默认使用web保护。在/config/auth.php中将其更改为sanctum

'defaults' => [
    // 'guard' => 'web',
    'guard' => 'sanctum',
    'passwords' => 'users',
],
9njqaruj

9njqaruj2#

您可以检查请求中是否有令牌。
如果token存在,请尝试从Sanctum auth guard获取用户并将其分配为当前用户。

if (request()->bearerToken() && $user = Auth::guard('sanctum')->user()) {
    Auth::setUser($user);
}

return Auth::check() // false for guest users, true if valid token present

并确保不要使用auth:sanctum中间件

相关问题