401未经授权的响应axios

mwkjh3gx  于 2023-02-04  发布在  iOS
关注(0)|答案(1)|浏览(224)

我尝试使用react、redux工具包和axios创建一个电子商务,问题是我希望用户登录并在登录后立即从后端获取购物车,但当我首次登录时,它总是失败并显示(未授权),因为它找不到令牌
然后在刷新后,它再次显示未授权,在第三次刷新后,它工作
这是我的购物车

export const getCart = createAsyncThunk("cart/getcart", async () => {
  const response = await axios.get("http://127.0.0.1:8000/techcart/get_cart/", {
    headers: {
      Authorization: `Token ${token}`,
    },
  });

  return response.data;
});
const cartSlice = createSlice({
  name: "cart",
  initialState: {
    cart: [],
    cartItemsIds :[],
  },

builder.addCase(getCart.fulfilled, (state, action) => {
      state.cart = action.payload;

这是我的登录功能

export const login = createAsyncThunk(
  "auth/login",
  async ({ email, password }, thunkAPI) => {
    try {
      const response = await axios.post(
        "http://127.0.0.1:8000/techcart/login/",

        { username: email, password }
      );
        localStorage.setItem("user", JSON.stringify(response.data));
      
      return response.data;
      
    } catch (error) {}
  }
);
const initialState = user
  ? { isLoggedIn: true, user }
  : { isLoggedIn: false, user: null };

  builder.addCase(login.fulfilled, (state, action) => {
      state.isLoggedIn = true;
      state.user = action.payload;

这里是我做这登录的地方

const HandleLogin = () => {
    dispatch(login({ email, password }));

  };

  useEffect(()=> {
    if(isLoggedIn){
      navigate('/')
      dispatch(getCart())
    }
  },[isLoggedIn])

购物车页面

useEffect(() => {

    dispatch(getCart());
    
  }, []);

这里是我定义我的令牌的地方:

export let user = JSON.parse(localStorage.getItem("user")) ? JSON.parse(localStorage.getItem("user")) :  null;
export let userId = user ?  user.user_id : null;
export let token = user!=null ? user.token : null;

这里是我在我的购物车切片导入它

import { user, token } from "../../constants";

我正在使用redux persist来保持购物车的状态
如果有人能帮我我很感激

rslzwgfq

rslzwgfq1#

当你执行js时,你直接初始化你的token,所以当你检索它时,它是未定义的,当你登录时,你确实存储了你的token,但是你没有在你的应用程序中更新它。
我可以看到您正在使用redux,因此请将令牌存储在redux存储中,在发送API调用以检索购物车之前,请从redux检索令牌,以便始终获得令牌的最新值

相关问题