如何选择使用 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 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
解决方案应该返回 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 错误?