【发布时间】:2020-03-18 19:03:52
【问题描述】:
我想使用 Vue Auth、Axios 和 Cakephp 进行身份验证,但我有一个众所周知的错误:
Access to XMLHttpRequest at 'http://dev.zenburo.actuelburo.local:8081/api/users/token' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我也有警告:
Cross-Origin Read Blocking (CORB) blocked cross-origin response http://dev.zenburo.actuelburo.local:8081/api/users/token with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details.
问题是,我没有内容类型“text / html”,我有标题“Access-Control-Allow-Origin”
此外,所有其他请求都在此 API 上工作。
这是我的代码:
Axios 实例(@/api):
import axios from 'axios'
export default axios.create({
baseURL: 'http://dev.zenburo.actuelburo.local:8081/api/',
timeout: 5000,
headers: {
'Access-Control-Allow-Origin': 'http://localhost:8080/',
'Content-Type': 'application/json',
'Access-Control-Expose-Headers': 'Access-Token',
'Access-Control-Allow-Credential': 'true',
}
});
Vue 身份验证配置(@/auth):
import bearer from '@websanova/vue-auth/drivers/auth/bearer'
import axios from '@websanova/vue-auth/drivers/http/axios.1.x'
import router from '@websanova/vue-auth/drivers/router/vue-router.2.x'
const config = {
auth: bearer,
http: axios,
router: router,
loginData: {
url: '/users/token',
redirect: '/dashboard',
method: 'POST',
}
};
export default config
main.js:
import Vue from 'vue'
import vuetify from './plugins/vuetify'
import VueRouter from 'vue-router'
import router from './routes'
import api from '@/api'
import VueAxios from 'vue-axios'
import auth from './auth'
import VueAuth from '@websanova/vue-auth'
import Index from './views/Index'
import ECharts from 'vue-echarts'
import store from './store'
import 'echarts/lib/chart/bar'
import 'echarts/lib/component/tooltip'
import 'echarts-gl'
window.Vue = Vue;
Vue.router = router
Vue.component('v-chart', ECharts);
Vue.config.productionTip = false;
Vue.use(VueRouter);
Vue.use(VueAxios, api);
Vue.use(VueAuth, auth);
new Vue({
vuetify,
store,
render: h => h(Index),
router,
}).$mount('#app');
最后,login.vue:
<template />
<script>
export default {
name: "Login",
data() {
return {
account: '',
password: '',
}
},
methods: {
login() {
let self = this
this.$auth.login({
body: {username: self.account, password: self.password},
method: 'POST',
rememberMe: true,
success: function () {
console.log('ok');
},
error: function (error) {
console.log(error)
},
})
}
}
}
<script/>
这是没有缓存的网络:
这是客户端还是服务器端的问题? (我再说一遍:除了身份验证之外的所有其他方法都有效;所以我有疑问)
有人有解决办法吗?
提前感谢您的帮助
【问题讨论】:
-
预检请求怎么样?选项?效果好吗?
-
@AlexisGatuingt,这些标头应该出现在您的 api 的响应中,您的 api 告诉您的浏览器允许客户端网站向您的 api 发出该请求。这是您的api and browser(称为预检)之间的对话。
标签: vue.js axios vue-router vue-cli