Ahm*_*aza 3 csrf laravel vue.js axios laravel-sanctum
我正在将基于 Vue JS(Quasar 框架)的 SPA 与 API 集成。该 API 是在 Laravel 中构建的,并使用 CSRF 的 sainttum。
当我向 sainttum 端点发送请求时,https://someweburl.com/sanctum/csrf-cookie它正确地将 XSRF-TOKEN 作为 cookie 发送。但是当我发送 POST 请求时,X-XSRF-TOKEN 没有将其自身附加到标头中。我收到“令牌不匹配”错误。
前端位于我的 localhost:8080 上,而 API 位于 url 上。我无法直接访问 Laravel 项目,只能访问 API。
以下是我的 axios 配置
import Vue from 'vue';
import axios from 'axios';
Vue.prototype.$axios = axios;
const apiBaseUrl = "https://someweburl.com";
const api = axios.create({ baseURL: apiBaseUrl });
api.defaults.withCredentials = true;
Vue.prototype.$api = api;
Vue.prototype.$apiBaseURL = apiBaseUrl;
export { axios, api, apiBaseUrl }
Run Code Online (Sandbox Code Playgroud)
以下是我试图实现的请求格式,即获取 CSRF 后的 POST 请求
export const fetchAllEvents = async function (context, payload) {
this._vm.$api.get('/sanctum/csrf-cookie').then(response => {
this._vm.$api.post('/api/website/event/all').then(response => {
context.commit('setAllEvents', response.data.data);
}).catch(error => {
console.log(error);
})
}).catch(error => {
console.log(error);
})
}
Run Code Online (Sandbox Code Playgroud)
当我检查使用 Postman 发出 POST 请求并将 X-XSRF-TOKEN 添加为标头时,我得到了正确的响应。这意味着 API 工作正常。但是axios有一些问题。
任何帮助将不胜感激。
Jet*_*ili 10
如果有人仍然遇到问题,我通过将此行添加到 axios 默认值来修复它
axios.defaults.withXSRFToken = true
Run Code Online (Sandbox Code Playgroud)
小智 5
也许这是因为axiosX-XSRF-TOKEN仅在前端和后端具有确切原点的情况下才设置标头。您提到您正在本地主机上尝试使用前端应用程序,并且 API 位于网络上的另一个 URL 上。
有关更多信息,请参阅 axios GitHub 存储库:https://github.com/axios/axios/blob/cd8989a987f994c79148bb0cacfca3379ca27414/lib/adapters/xhr.js#L179
| 归档时间: |
|
| 查看次数: |
4129 次 |
| 最近记录: |