首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >websanova/ vue -auth未设置无记名令牌vue 3

websanova/ vue -auth未设置无记名令牌vue 3
EN

Stack Overflow用户
提问于 2022-06-26 07:24:06
回答 1查看 206关注 0票数 2

我在vue-3应用程序中使用websanova/vue-auth进行身份验证。我遵循文档,登录是成功的,但当我试图获得用户时,它没有传递令牌或承载令牌。

vue-auth配置

auth.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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')

登录表格

代码语言:javascript
复制
await auth.login({
            data: form,
            authType: "bearer",
            redirect: '/dashboard',
            fetchUser: true,
            staySignedIn: true,
            rememberMe: true,
        })
        .then(null, (res) => {
            errors(res.response);
        });

登录响应

代码语言:javascript
复制
{
    "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路由器重新加载页面或转到其他页面时,$auth.check()返回了false。

我的websanova/vue-auth设置有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-29 14:52:04

我同一天解决了这个问题。websanova/vue-auth包将查看位于API头响应处的令牌。所以在我的例子中,我使用的是Laravel,解决方案是在API的头响应中包含令牌。

注意:令牌的头键应该是authorization,您应该添加值为AuthorizationAccess-Control-Expose-Headers响应头。

代码:

代码语言:javascript
复制
// transform user data
$data = new UserResource($user);

return response()
  ->json(compact('token', 'data'))
  ->header('authorization', $token)
  ->header('Access-Control-Expose-Headers', 'Authorization');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72759640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档