gpt4 book ai didi

javascript - localstorage 做注意更新 JWT Reactjs

转载 作者:行者123 更新时间:2023-11-30 19:18:20 24 4
gpt4 key购买 nike

这是系统流程:

  • 我登录并在本地存储中保存用户数据。
  • 我有一个组件读取 localStorage 以获取用户数据,例如 JWT。

问题是当我重新登录时,localStorage 不会更新新数据,因此我无法使用 localStorage 新用户数据进行请求。
我发现如果我手动更新页面,localStorage 会更新。
在 reactjs 中,我使用 react-router-dom 来浏览页面。

如何获取新的登录数据来更新 localStorage?

//login
api.post('users/login', {email, password})//make log in
.then(res => {
localStorage.removeItem('user_info');// I remove the ond data from localStorage
if(res){//If api do the post
let data = JSON.stringify(res.data.data)
localStorage.setItem('user_info', data);//Save new data in localStorage
history.push('/');//Go the homepage
}
}).catch(error => {
this.setState({ noAuth: true })
console.log('error');
});

获取localStorage中用户数据的组件:

import axios from "axios";
import { isAuthenticated } from '../../components/Util/Auth';
export const token = 'Z31XC52XC4';

// var user_info = JSON.parse(localStorage.getItem('user_info'));
// var auth_token = user_info.auth_token;
// console.log(isAuthenticated);
if (isAuthenticated()) {
var user_info = JSON.parse(localStorage.getItem('user_info'));
var auth_token = user_info.auth_token;
}


const api = axios.create({
// baseURL: 'https://url-from/api/', //PRODUÇÃO
baseURL: 'https://url-from/api/', //DESENVOLVIMENTO
headers: {
'Accept': 'application/json, text/plain, */*',
'Access-Origin': 'D',
'Authorization': `Bearer ${auth_token}`,
'Company-Token': `${token}`
}
});
// console.log(user_info);

api.interceptors.request.use(
config => {
console.log(config.headers);
console.log(user_info);
const newConf = {
...config,
headers: {
...config.headers,
'Authorization': `Bearer ${auth_token}`,
}
}
// return newConf;
},
error => Promise.reject(error)
)

export default api;

最佳答案

当您创建一个 Axios 实例时,您将传入一个“静态”值。

        'Authorization': `Bearer ${auth_token}`,

如果这个值不存在,就变成

        'Authorization': `Bearer undefined`,

要修复它,您需要向 axios 添加一个拦截器以在每次请求时更新该 token 的值,而不仅仅是在实例创建时。

api.interceptors.request.use(
config => {
const user_info = JSON.parse(localStorage.getItem('user_info'));
const newConf = {
...config,
headers: {
...config.headers,
'Authorization': `Bearer ${user_info.auth_token}`,
}
}
},
error => Promise.reject(error)
)

关于javascript - localstorage 做注意更新 JWT Reactjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57756746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com