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

Posted

技术标签:

【中文标题】如何选择使用 Laravel Sanctum 进行身份验证?【英文标题】:How to optionally authenticate with Laravel Sanctum? 【发布时间】:2021-12-23 11:47:19 【问题描述】:

我正在使用Laravel Sanctum 对用户进行身份验证。我想要一条可供客人访问并登录用户的路线。登录用户在 Authorization 标头中发送 API Token。

我尝试过在没有身份验证的情况下创建路由,但这样我就看不到已登录的用户。

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

GET /noauth with auth header returns false, user is not logged inGET /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 inGET /yesauth withouth auth header returns 401, unauthorized

解决方案应该返回 true 和 auth headers,并且 false 没有 auth headers。

【问题讨论】:

帮我试试return Auth::guard('web')->check(); @ceejayoz 无论身份验证标头如何,它都返回 false。我可能配置错误,因为我只将这个 laravel 应用程序用于 API。 Auth::guard('api') 返回错误。 【参考方案1】:

Auth 默认使用web 保护。将/config/auth.php中的sanctum改成:

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

【讨论】:

以上是关于如何选择使用 Laravel Sanctum 进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel sanctum 在 vue 中保存令牌的最佳方法

如何在没有典型 laravel /login 的情况下使用 laravel sanctum

为啥我的 CSRF 令牌与 Laravel 和 Sanctum 不匹配?

如何使用 Laravel Sanctum 和 React 修复 401 Unauthorized 错误?

Laravel Sanctum 和使用 Pusher.js 进行广播(401、419 错误)

Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证