Javascript 为什么在我的react应用程序中,JWT令牌在首次登录时不可用?

Javascript 为什么在我的react应用程序中,JWT令牌在首次登录时不可用?,javascript,reactjs,ecmascript-6,axios,Javascript,Reactjs,Ecmascript 6,Axios,为什么当我加载应用程序和/或重新加载页面,然后尝试登录应用程序时,JWT令牌在第一次尝试时不可用: 但如果我注销并重新登录,我会看到现在令牌对我可用: 我已经仔细检查了我的代码,似乎无法找出导致此问题的原因 api_helper.js import axios from "axios" import accessToken from "./jwt-token-access/accessToken" const token = accessToken(

为什么当我加载应用程序和/或重新加载页面,然后尝试登录应用程序时,JWT令牌在第一次尝试时不可用:

但如果我注销并重新登录,我会看到现在令牌对我可用:

我已经仔细检查了我的代码,似乎无法找出导致此问题的原因

api_helper.js

import axios from "axios"
import accessToken from "./jwt-token-access/accessToken"

const token = accessToken();
const API_URL = "http://localhost:8080";

const axiosApi = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
    // 'Authorization': 'Bearer ' + token,
  },
})

axiosApi.defaults.headers.common["Authorization"] = token ? `Bearer ${token}` : '';

axiosApi.interceptors.response.use(
  response => response,
  error => Promise.reject(error)
)

export async function get(url, config = {}) {
  return await axiosApi
    .get(url, { ...config })
    .then(response => response.data)
}

export async function post(url, data, config = {}) {
  return axiosApi
    .post(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function put(url, data, config = {}) {
  return axiosApi
    .put(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function del(url, config = {}) {
  return await axiosApi
    .delete(url, { ...config })
    .then(response => response.data)
}
import { post, get, put } from "./api_helper";
const getLoggedInUser = () => {
    const user = localStorage.getItem('authUser');
    if (user) return JSON.parse(user);
    return null;
}

//is user is logged in
const isUserAuthenticated = () => {
    return getLoggedInUser() !== null;
}

export { 
    getLoggedInUser, 
    isUserAuthenticated
}
const accessToken = () => {
  const obj = JSON.parse(localStorage.getItem("authUser"));
  
  if (obj && obj.token) {
    return obj.token;
  } else {
    return "";
  }
};

export default accessToken;
auth_helper.js

import axios from "axios"
import accessToken from "./jwt-token-access/accessToken"

const token = accessToken();
const API_URL = "http://localhost:8080";

const axiosApi = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
    // 'Authorization': 'Bearer ' + token,
  },
})

axiosApi.defaults.headers.common["Authorization"] = token ? `Bearer ${token}` : '';

axiosApi.interceptors.response.use(
  response => response,
  error => Promise.reject(error)
)

export async function get(url, config = {}) {
  return await axiosApi
    .get(url, { ...config })
    .then(response => response.data)
}

export async function post(url, data, config = {}) {
  return axiosApi
    .post(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function put(url, data, config = {}) {
  return axiosApi
    .put(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function del(url, config = {}) {
  return await axiosApi
    .delete(url, { ...config })
    .then(response => response.data)
}
import { post, get, put } from "./api_helper";
const getLoggedInUser = () => {
    const user = localStorage.getItem('authUser');
    if (user) return JSON.parse(user);
    return null;
}

//is user is logged in
const isUserAuthenticated = () => {
    return getLoggedInUser() !== null;
}

export { 
    getLoggedInUser, 
    isUserAuthenticated
}
const accessToken = () => {
  const obj = JSON.parse(localStorage.getItem("authUser"));
  
  if (obj && obj.token) {
    return obj.token;
  } else {
    return "";
  }
};

export default accessToken;
accessToken.js

import axios from "axios"
import accessToken from "./jwt-token-access/accessToken"

const token = accessToken();
const API_URL = "http://localhost:8080";

const axiosApi = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
    // 'Authorization': 'Bearer ' + token,
  },
})

axiosApi.defaults.headers.common["Authorization"] = token ? `Bearer ${token}` : '';

axiosApi.interceptors.response.use(
  response => response,
  error => Promise.reject(error)
)

export async function get(url, config = {}) {
  return await axiosApi
    .get(url, { ...config })
    .then(response => response.data)
}

export async function post(url, data, config = {}) {
  return axiosApi
    .post(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function put(url, data, config = {}) {
  return axiosApi
    .put(url, { ...data }, { ...config })
    .then(response => response.data)
}

export async function del(url, config = {}) {
  return await axiosApi
    .delete(url, { ...config })
    .then(response => response.data)
}
import { post, get, put } from "./api_helper";
const getLoggedInUser = () => {
    const user = localStorage.getItem('authUser');
    if (user) return JSON.parse(user);
    return null;
}

//is user is logged in
const isUserAuthenticated = () => {
    return getLoggedInUser() !== null;
}

export { 
    getLoggedInUser, 
    isUserAuthenticated
}
const accessToken = () => {
  const obj = JSON.parse(localStorage.getItem("authUser"));
  
  if (obj && obj.token) {
    return obj.token;
  } else {
    return "";
  }
};

export default accessToken;

这是对您今天早些时候提出的问题的回答,如果仍然有用,随后将其删除。(问题的标题是“如何将对象数组循环并显示到两个不同的div容器中,就像并排显示一个面板一样?”)

该代码段有一个
extractDisplayText
函数和一个
addChildrenToRightDiv
函数来填充div,并利用它按照您的建议对它们进行样式设置

快乐编码

const
//获取数据、提取字符串并标识DOM容器
json=getInput(),
text=extractDisplayText(json),
外部=document.getElementById(“容器”);
//创建左div(并将第一个字符串放入其中)
const left=document.createElement(“div”);
left.textContent=文本[0];
//创建右div(给它“flex direction:column`)
const right=document.createElement(“div”);
右。classList.add(“列”);
right.classList.add(“左边的分隔符”);
//生成列的子项(并将剩余字符串放入其中)
addChildrenToRightDiv();
//将两个div添加到DOM中
container.appendChild(左);
container.appendChild(右);
函数addChildrenToRightDiv(){
const othertext=text.slice(1);
for(让其他文本中的文本){
const newDiv=document.createElement(“div”);
newDiv.textContent=文本;
右。追加儿童(newDiv);
}
}
函数提取显示文本(数据){
字符串=[];
for(let data.tableData.DataPath的路径){
常数
[标题,标签]=path.row,
headerText=header.header,
num=header.value,
labelText=label.label,
日期=label.value,
displayText=`${headerText}${num},${labelText}${date}`;
strings.push(displayText);
}
返回字符串;
}
函数getInput(){
返回{
“表格数据”:{
“数据路径”:[
{
“行”:[
{“header”:“Initial Seq#:”,“value”:“5”},
{“标签”:“已发布”,“价值”:“2015年12月1日”}
]
},
{
“行”:[
{“header”:“Initial Seq#:”,“value”:“3”},
{“标签”:“已发布”,“价值”:“2014年9月25日”}
]
},
{
“行”:[
{“header”:“Initial Seq#:”,“value”:“5”},
{“标签”:“已发布”,“价值”:“2013年2月10日”}
]
}
]
}
};
}
div{padding:5px;}
.左侧分隔符{左边框:3px纯蓝色;}
.row{display:flex;flex direction:row;}
.column{display:flex;flex direction:column;}/*垂直布局*/

非常感谢您的解决方案。非常感谢你对我上一个问题的帮助。这太棒了!