![](/img/trans.png)
[英]Vuejs / Vue-auth Token is removed from localStorage in IE and Edge works in Chrome and FF
[英]websanova/vue-auth not set bearer token vue 3
我在我的 vue-3 应用程序中使用 websanova/vue-auth 进行身份验证。 我按照文档登录成功,但是当我尝试获取用户时,它没有传递令牌或不记名令牌。
vue-auth 配置。
auth.js
import {createAuth} from '@websanova/vue-auth/src/v3.js';
import driverAuthBearer from '@websanova/vue-auth/src/drivers/auth/bearer.js';
import driverHttpAxios from '@websanova/vue-auth/src/drivers/http/axios.1.x.js';
import driverRouterVueRouter from '@websanova/vue-auth/src/drivers/router/vue-router.2.x.js';
import driverOAuth2Google from '@websanova/vue-auth/src/drivers/oauth2/google.js';
import driverOAuth2Facebook from '@websanova/vue-auth/src/drivers/oauth2/facebook.js';
driverOAuth2Google.params.client_id = 'google-key';
driverOAuth2Facebook.params.client_id = 'facebook-key';
export default (app) => {
app.use(createAuth({
plugins: {
http: app.axios,
router: app.router,
},
drivers: {
http: driverHttpAxios,
auth: driverAuthBearer,
router: driverRouterVueRouter,
oauth2: {
google: driverOAuth2Google,
facebook: driverOAuth2Facebook,
}
},
options: {
rolesKey: 'type',
notFoundRedirect: {name: 'notfound'},
fetchData: { url: `auth/user`, method: 'GET', enabled: true, authType: 'bearer' },
refreshData: { url: `auth/user`, method: 'GET', enabled: true, interval: 30, authType: 'bearer' },
authType: "bearer",
},
}));
}
main.js
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'
import auth from './plugins/auth.js';
import axios from './plugins/axios.js';
const app = createApp(App);
app.router = router
app.use(axios)
app.axios.defaults.baseURL = process.env.VUE_APP_API_URL;
app.use(ElementPlus)
app.use(router)
app.use(auth)
app.mount('#app')
登录表单
await auth.login({
data: form,
authType: "bearer",
redirect: '/dashboard',
fetchUser: true,
staySignedIn: true,
rememberMe: true,
})
.then(null, (res) => {
errors(res.response);
});
登录响应
{
"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"data":{
"id":3,
"name":"john Doe",
"email":"john@doe.com",
"email_verified_at":null,
"created_at":"2022-06-25T12:36:40.000000Z",
"updated_at":"2022-06-25T12:36:40.000000Z"
}
}
标题中没有“授权”,当我使用 vue-router $auth.check() 重新加载页面或转到其他页面时,返回 false。
我的 websanova/vue-auth 设置有什么问题?
我在同一天解决了这个问题。 websanova/vue-auth 包将查看位于 API 标头响应中的令牌。 所以就我而言,我使用 Laravel 的解决方案是将令牌包含在 API 的标头响应中。
注意:令牌的标头键应该是authorization
,您应该添加Access-Control-Expose-Headers
响应标头,其值为Authorization
代码:
// transform user data
$data = new UserResource($user);
return response()
->json(compact('token', 'data'))
->header('authorization', $token)
->header('Access-Control-Expose-Headers', 'Authorization');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.