php - 带有 Vuejs 的 Laravel 7.x Sanctum (SPA) 总是返回 401 Unauthorized

标签 php laravel vue.js single-page-application laravel-sanctum

所以已经过了几个小时,即使通读并尝试互联网上可用的任何可能的解决方案,我也无法弄清楚这个问题。我正在使用 Laravel 7.x Vue js 并挣扎于 Sanctuary SPA 验证。

登录 使用 的请求工作正常身份验证::路由()在 web.php 中定义

enter image description here

但是, 中定义的 API 发出的任何请求api.php auth:sanctum 中间件 返回 401。例如,调用获取用户对象失败,状态为 401:

enter image description here

这是请求头:

enter image description here

这是 web.php

enter image description here

这是 api.php

enter image description here

这是有状态 对象在 sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,127.0.0.1:8000')),
在 vue.js 方面,我将 withCredentials 标志设置为 true:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';window.axios.defaults.withCredentials = true;
cors.php , suports_credentials 标志也设置为 true

enter image description here

而且,这是我的 内核.php

/**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

最佳答案

我遇到了同样的问题,我找不到任何答案,但在故障排除后我让它工作了。

您的问题是您通过 localhost 访问它端口 8000,但在 sanctum 配置下的有状态参数中没有 localhost:8000 (甚至 localhost 指向 127.0.0.1 )。配置使用 $_SERVER['SERVER_NAME']所以它实际上在访问它时寻找确切的内容。

一个简单的修复如下:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', implode(',', [
    'localhost',
    'localhost:8000',
]))),

关于php - 带有 Vuejs 的 Laravel 7.x Sanctum (SPA) 总是返回 401 Unauthorized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62354802/

相关文章:

php - 带有 C 包装器的脚本上的 Setuid

javascript - Laravel 5 依赖下拉列表方法

javascript - 在 WordPress 中添加自定义 ul 的事件链接

memory-management - laravel 'Allowed memory size of 134217728 bytes exhausted' 关于基本查询

vue.js - 在单元测试中抑制 Vue 警告

vue.js - 有条件地渲染父元素,保留内部 html

css - 跳过 v-for vuejs2 的第一个结果

php - 修改数据卷中的文件后添加了非法 token

laravel - HasManyThrough 具有一对多关系

mysql - 如何使用JSON对象进行mysql查询?