我现在遵循两种不同的方法在我的 Laravel 7/Vue SPA 中使用 Laravel Sanctum 进行身份验证。两者都遇到了同样的问题。以下是方法:
https://blog.codecourse.com/setting-up-laravel-sanctum-airlock-for-spa-authentication-with-vue/
https://dev.to/aschmelyun/authenticating-a-vue-spa-is-easy-with-laravel-sanctum-392a
两者都做同样的事情——安装 Sanctum,安装标准的 auth 脚手架,设置中间件,添加一两个虚拟用户。然后,使用 Axios 打sanctum/csrf-cookie
路线,然后打路线,/login
并传入电子邮件和密码。
但是,使用这两种方法,我都会遇到相同的问题 - 401 'Unauthenticated' 错误。浏览器开发工具的 Network 选项卡显示sanctum/csrf-cookie route
返回 204 以及 Laravel 会话和 XSRF cookie 已设置。该login
路由显示 302 和一个到 /home 的重定向,这是标准的 Laravel auth 重定向。然后当它到达 api.php 文件中定义的路由时:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
它返回 401 - 未经身份验证。
现在,使这项工作看起来符合预期的唯一方法是调整 RouteServiceProvider.php 中的 mapApiRoutes() 函数:
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
将中间件属性从“api”更改为“web”可以解决此问题。但这似乎是一个完整的问题,我不应该做的事情。
我已经完全遵循了这两种方法——在这两种情况下,所有域、中间件等的设置都完全相同。
有任何想法吗?