【发布时间】:2021-10-27 13:38:40
【问题描述】:
我在使用 Laravel Sanctum 时遇到了一个奇怪的问题。我已按照文档中的说明对其进行了配置,并且可以正常工作。
但有时它在尝试获取 sanctum-protected 路由时开始发送 419 错误,并且仅在清除浏览器 cookie 或重置应用程序密钥 (php artisan key:generate) 后才有效。
它只发生在具有本地域的本地环境中(webapp.test 由主机文件路由并由 Apache 网络服务器提供服务),但我担心这会发生在生产服务器上。
我的 .env 文件包含我阅读的下一个配置,它需要在本地环境中工作:
SESSION_DOMAIN=webapp.test
SANCTUM_STATEFUL_DOMAINS=webapp.test
此外,会话驱动程序和生命周期是默认值:
SESSION_DRIVER=file
SESSION_LIFETIME=120
我的 config/cors.php 文件:
<?php
return [
/*
|--------------------------------------------------------------------------
| Cross-Origin Resource Sharing (CORS) Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your settings for cross-origin resource sharing
| or "CORS". This determines what cross-origin operations may execute
| in web browsers. You are free to adjust these settings as needed.
|
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => false,
'max_age' => true,
'supports_credentials' => true,
];
我的 bootstrap.js 文件:
window.axios = require("axios");
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
window.axios.defaults.withCredentials = true;
我有一个实例化 axios 的 api.js 文件:
import axios from "axios";
export const api = axios.create({
baseURL: `${baseUrl}/api`,
headers: {
"Content-Type": "application/json",
},
});
然后当我必须调用我的 api 端点时,我只需导入这个 api,例如:
import { api } from "api";
...
api.post(`/cart/add`,data).then(()=>{}).catch(err=>{console.error(err});
正如我之前所说,webapp 运行良好,但几天后它会突然阻止所有请求并发送 419 令牌不匹配错误(即使在使用私有模式时),直到清除浏览器 cookie 或重置应用程序密钥。
我的设置有什么问题还是您认为只是本地行为?
任何建议都会有所帮助。
【问题讨论】:
-
您可以尝试其他会话驱动程序,看看是否有相同的结果?
-
只是您的会话生命周期设置为 2 小时吗?您只需要重新验证您的用户
标签: laravel authentication single-page-application laravel-sanctum