Laravel Sanctum and Vue-未经验证

问题描述

我现在遵循两种独立的方法在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“未经身份验证”错误。浏览器开发工具的“网络”选项卡显示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”可解决此问题。但这似乎是一个完整的难题,而且我不需要做

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

有什么想法吗?

解决方法

Laravel api卫队基于令牌而不是会话进行工作。看来您已经设置了三个防护装置:webapisanctum。可能是您在登录webapi的同时仍然需要通过sanctum保护装置进行身份验证吗?

,

我遇到了同样的问题,但是当我更换 ->middleware('api')->middleware('web') 成功了!!