php 我如何使用vue和laravel自动获得axios头中的承载令牌

qcbq4gxm  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(142)

我正在尝试获取当前用户的令牌以获取检索数据,如下所示:

async getUser() {
    const config = {
                headers: {
                    'Accept': 'application/json',
                    'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ...'
                }
            }
  await this.axios
    .get("/api/auth/testapi", config)
    .then((response) => {
      this.user = response.data;
    })
    .catch((error) => {
      console.log(error);
      this.user = [];
    });
},

如何设置“Authorization”头以自动获取已验证用户的当前令牌?
我尝试了本地存储,如下所示:

async getUser() {
    const token = localStorage.getItem('access_token');
    const config = {
                headers: {
                    'Accept': 'application/json',
                    'Authorization': `Bearer ${token}`
                }
            }
  await this.axios
    .get("/api/auth/testapi", config)
    .then((response) => {
      this.user = response.data;
    })
    .catch((error) => {
      console.log(error);
      this.user = [];
    });
},

但效果不太好
有什么问题吗?
最新消息:
app.js:

require("./src/main.js");
import VueAxios from "vue-axios";
import axios from "axios";
Vue.use(VueAxios, axios);

if (localStorage.has("access_token")) {
axios.defaults.headers.common["Authorization"] =
"Bearer " + localStorage.getItem("access_token");
}

loginSuccess(accessToken) {
localStorage.setItem('access_token', accessToken);
window.location.href = '/home';
}

if结束后出现问题

';' expected.
cbeh67ev

cbeh67ev1#

我会怎么做
对于每个请求,在js文件(不是vue)上,如bootstrap.js文件(因为它将很快加载):

let access_token = localStorage.getItem('access_token');
if(access_token) {
    axios.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
}

在登录功能上,当您登录用户并检索访问令牌时:

loginSuccess(accessToken) {
    localStorage.setItem('access_token', accessToken);
    window.location.href = '/home';
}

它会将用户重定向到您的主页或用户需要重定向到的任何页面,并且将在localStorage上设置access_token。
剩下的最后一位是在用户注销时删除localStorage access_token项,并可能使用拦截器捕获401,以删除access_token并在令牌到期时重定向到/login。

window.axios.interceptors.response.use(function (response) {
    return response;
}, function (error) {
    if (401 === error.response.status) {
        localStorage.removeItem('access_token');
        window.location.href = '/login'
    } else {
        return Promise.reject(error);
    }
});

如果您打算向不属于您的外部端点发出axios请求,您可能需要检查401的域以确保它是您的域

相关问题