1

通过阅读 Laravel 文档,似乎在使用 Sanctum Vue 时只会使用基于 cookie 的身份验证。

我试图将现有应用程序(使用 Livewire 完成登录)移动到 Vue,但直接对我的第一个 api 端点的调用被重定向到登录页面。

所以我创建了一个全新的 Larvel 安装,安装了 Breeze(带有 Inertia),然后是 Sanctum,发布了配置等。

但是当我登录然后访问我的测试端点(只返回 200 Ok)时,它会重定向到登录页面(因为我已经登录,所以会重定向到 Breeze 仪表板)。

我是否需要为由 保护的端点手动执行任何操作auth:sanctum才能通过身份验证?

更新

我已经设置axios.defaults.withCredentials,它正在返回401 Unauthorized。我的 app.js:

axios.defaults.withCredentials = true;
axios.get('/api/test')
    .then(function (response) {
        // handle success
        console.log(response);
    })
    .catch(function (error) {
        // handle error
        console.log(error);
    })
    .then(function () {
        // always executed
    });
4

1 回答 1

0

首先确保您的应用程序的 CORS 配置返回Access-Control-Allow-Credentials值为True. 这可以通过将supports_credentials应用程序config/cors.php配置文件中的选项设置为true.

然后,如果您使用的是 axios,您应该withCredentials在您的 axios 实例上启用该选项:

axios.get('some api url', {withCredentials: true});

或全球:

axios.defaults.withCredentials = true;

如果您不使用 Axios 从前端发出 HTTP 请求,则应在自己的HTTP 客户端上执行等效配置。

Laravel 文档参考


如果你使用 Postman 来测试你的 api,这里有一个 sanctum 认证请求的智能实现。基本上你必须先得到 sanctum cookie,然后在XSRF-TOKENheader 上发送 cookie。

于 2021-02-23T18:43:14.907 回答