1

我现在遵循两种不同的方法在我的 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”可以解决此问题。但这似乎是一个完整的问题,我不应该做的事情。

我已经完全遵循了这两种方法——在这两种情况下,所有域、中间件等的设置都完全相同。

有任何想法吗?

4

2 回答 2

1

我遇到了同样的问题,但是当我 ->middleware('api')->middleware('web') 它替换它时!

于 2021-01-21T21:59:02.310 回答
0

Laravelapi守卫基于令牌而不是会话工作。看起来你有三个守卫webapisanctum。可能是您正在登录webapi,同时仍需要通过sanctum警卫进行身份验证?

于 2020-08-25T14:52:24.120 回答