最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

chatGPT?deBug解決管理員登入服務(wù)器返回401問題

 更新時(shí)間:2023年05月06日 14:25:56   作者:boombb  
這篇文章主要介紹了chatGPT?deBug解決管理員登入,服務(wù)器返回401,沒有拿到數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題復(fù)現(xiàn):

連接錢包后,會調(diào)用函數(shù),彈出窗口讓用戶簽名

   if (signatureMessage) {
        await signMessageAsync({
          message: signatureMessage,
        });
        dispatch(changeHasLoggedToTrue());
      }

有了簽名后,會調(diào)用signIn來設(shè)置本地存儲

signIn函數(shù)

  const signIn = async (signature) => {
    try {
      const signinRes = await API.post(`/auth/signin`, {
        address: address,
        signature: signature,
      });
      const accessToken = signinRes.data?.data?.access_token;
      setLocalStorage("accessToken", accessToken);//設(shè)置本地存儲
      refreshAPIToken();
      addressInfo.current.address = address;
    } catch (err) {
      console.log("signin");
      showMessage({
        type: "error",
        title: "Failed to sign-in",
        body: err.message,
      });
      disconnect();
    }
  };

如果用戶連接了錢包就會調(diào)接口,獲取用戶是否是管理員 通過RTK(redux toolkit)存儲在isAdmin變量里

 const res = await API.get(`/member/${address}`);
        if (!res.data.data) {
          dispatch(changeIsAdminToFalse());
          return;
        }
        if (res.data.data.role.includes("Member")) {
          dispatch(changeIsMemberToTrue());
        }

當(dāng)isAdmin為true的時(shí)候,才顯示member列表

后端接口也限制了,不是管理員拿不到數(shù)據(jù),而我明明用管理員登入了,還是拿不到,刷新才拿得到數(shù)據(jù)。不刷新的時(shí)候控制臺報(bào)401,Unauthorized,沒有權(quán)限。

解決過程

于是問了gpt

gpt給了5種可能的原因

關(guān)鍵是第一條 問題定位到了沒有accessToken 但是我一看控制臺Application里面 access token沒錯(cuò),是有的,但是數(shù)據(jù)要刷新頁面才出來,于是我繼續(xù)問

我:the access token is right , we can get the requested source by this token after refresh. But how to get the requested source without refresh

GPT:If you're able to access the resource after refreshing the page, it's possible that the access token is not being sent with subsequent requests after the initial connection is made.

To ensure that the access token is being sent with all subsequent requests, you can set the token in the headers of the Axios instance. Here's an example of how to do this: 翻譯:刷新后才出現(xiàn)數(shù)據(jù),可能是因?yàn)樵诎l(fā)送請求的時(shí)候access token沒有被發(fā)送,為了確保所有的請求都帶有access token 需要給axios實(shí)例設(shè)置header

import axios from 'axios';
const API = axios.create({
  baseURL: 'https://example.com/api',
  headers: {
    Authorization: `Bearer ${getLocalStorage('accessToken')}`,
  },
});
API.interceptors.response.use(
  response => response,
  async error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      const accessToken = await handleRefreshToken();
      API.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
      return API(originalRequest);
    }
    return Promise.reject(error);
  },
);

GPT給了一段代碼 我自己再看邏輯 修改 關(guān)鍵就是當(dāng)服務(wù)器返回401的時(shí)候,要給axios請求設(shè)置accessToken,再次發(fā)送請求;

漏洞

1.每次請求剛開始都返回401,request攔截之后,再次發(fā)送請求才拿到數(shù)據(jù)

2.如果accessToken過期了,請求不到數(shù)據(jù),需求是要清除本地緩存并退出錢包登錄

第2條是新增的需求,如何判斷accessToken過期,GPT說如果accessToken過期,服務(wù)器會返回401,所以這里if判斷服務(wù)器會返回401后的邏輯不能是重新發(fā)送請求。首先要解決第一個(gè)問題。為何每次請求都返回401?

打log,發(fā)現(xiàn)在連接錢包set token,token有值之前,就發(fā)送請求,所以要在連接錢包set token,確保token有值之后才發(fā)送請求,之前是判斷為管理員就發(fā)送請求,這個(gè)在需求層面來將沒錯(cuò),但是connect wallet 設(shè)置isAdmin為true的時(shí)候還沒有set token 所以在 set token之后新增 dispatch(changeSigninToTrue()); useEffect監(jiān)聽hasSiginin:

  useEffect(() => {
    if (hasSiginin) {
      console.log("有發(fā)送請求");
      searchList();
    }
  }, []);

最終代碼

import axios from "axios";
import { getLocalStorage, removeLocalStorage } from "@/src/utils/utility";
import { useLogout } from "../src/hooks/useLogout";
const API = axios.create({
  baseURL: process.env.NEXT_PUBLIC_FRENART_BACKEND_API,
});
API.interceptors.request.use(
  (config) => {
    const accessToken = refreshAPIToken();
    if (accessToken) {
      config.headers.Authorization = `Bearer ${accessToken}`; //accessToken
    }
    return config;
  },
  (error) => Promise.reject(error)
);
function handleUnauthorizedError() {
  const logout = useLogout();
  logout();
}
API.interceptors.response.use(
  (response) => response,
  async (error) => {
    const accessToken = refreshAPIToken();
    error.config.headers.Authorization = `Bearer ${accessToken}`;
    const originalRequest = error.config;
    if (error.response?.status === 401 && !originalRequest._retry) {
      console.log("401");
      handleUnauthorizedError();
    }
    return Promise.reject(error);
  }
);
function refreshAPIToken() {
  const accessToken = getLocalStorage("accessToken");
  API.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
  return accessToken;
}
export { refreshAPIToken };
export default API;

之后管理員連接錢包,就能拿到數(shù)據(jù)了,因?yàn)榘l(fā)送請求的時(shí)候 header里面有了Authorization,即有了accessToken

以上就是chatGPT deBug解決管理員登入,服務(wù)器返回401,沒有拿到數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于chatGPT deBug解決管理員登入,服務(wù)器返回401,沒有拿到數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 整理的比較全的一句話后門代碼(方面大家查找后門)

    整理的比較全的一句話后門代碼(方面大家查找后門)

    整理的比較全的一句話后門代碼(方面大家查找后門),很多情況下也會有一些特殊字符的表示,原理一樣。
    2010-09-09
  • git基礎(chǔ)之各版本控制系統(tǒng)介紹

    git基礎(chǔ)之各版本控制系統(tǒng)介紹

    這篇文章主要為大家介紹了git基礎(chǔ)之各版本控制系統(tǒng)以及版本的演變,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 會員下線加積分,實(shí)現(xiàn)原理分享(有時(shí)間限制)

    會員下線加積分,實(shí)現(xiàn)原理分享(有時(shí)間限制)

    當(dāng)某個(gè)用戶發(fā)出一個(gè)邀請后,另一個(gè)用戶通過這個(gè)鏈接進(jìn)行網(wǎng)站后,為發(fā)這個(gè)鏈接的用戶加10個(gè)積分。
    2011-09-09
  • Ubuntu中安裝vscode與官方插件

    Ubuntu中安裝vscode與官方插件

    這篇文章介紹了Ubuntu中安裝vscode與官方插件的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Git工作流演示及三種工作方式

    Git工作流演示及三種工作方式

    在項(xiàng)目開發(fā)過程中使用Git的方式有三種工作方式,分別是集中式工作流,Git Flow工作流,F(xiàn)orking 工作流。下面主要針對Git工作流進(jìn)行講解
    2022-04-04
  • chatGPT本地部署、運(yùn)行和接口調(diào)用的詳細(xì)步驟

    chatGPT本地部署、運(yùn)行和接口調(diào)用的詳細(xì)步驟

    這篇文章主要介紹了chatGPT本地部署、運(yùn)行和接口調(diào)用的詳細(xì)步驟,文中給大家介紹了cookie?信息寫入?config.json的三種方式,每種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟

    Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟

    本文主要介紹了Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

    基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

    JWT(json web token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)。下面這篇文章主要給大家介紹了關(guān)于基于Token的身份驗(yàn)證之JWT的基礎(chǔ)相關(guān)資料,文中通過示例代碼的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • VScode中配置使用fortran的方法

    VScode中配置使用fortran的方法

    這篇文章主要介紹了VScode中配置使用fortran的方法,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • 本地化部署 DeepSeek 全攻略(linux、windows、mac系統(tǒng)部署)

    本地化部署 DeepSeek 全攻略(linux、windows、mac系統(tǒng)部署)

    本文詳細(xì)介紹了在Linux、Windows和Mac系統(tǒng)上本地部署DeepSeek模型的步驟,包括硬件要求、軟件環(huán)境、模型下載和部署步驟、以及優(yōu)化與注意事項(xiàng),感興趣的朋友一起看看吧
    2025-02-02

最新評論

洪湖市| 资中县| 仪陇县| 庆阳市| 芦山县| 四子王旗| 崇文区| 兴文县| 铁岭县| 东源县| 乌审旗| 巨野县| 南华县| 上犹县| 白河县| 延吉市| 镇平县| 隆昌县| 洛川县| 肥乡县| 宁安市| 华容县| 南川市| 双辽市| 明溪县| 平阴县| 石渠县| 平乐县| 马山县| 清新县| 株洲市| 涪陵区| 湖口县| 太仓市| 抚顺市| 磐石市| 汉沽区| 麻栗坡县| 高平市| 柯坪县| 当雄县|