chatGPT deBug解决管理员登入,服务器返回401,没有拿到数据

问题复现:

连接钱包后,会调用函数,弹出窗口让用户签名

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

有了签名后,会调用signIn来设置本地存储

signIn函数

  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);//设置本地存储refreshAPIToken();addressInfo.current.address = address;} catch (err) {console.log("signin");showMessage({type: "error",title: "Failed to sign-in",body: err.message,});disconnect();}};

如果用户连接了钱包就会调接口,获取用户是否是管理员 通过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());}

当isAdmin为true的时候,才显示member列表

后端接口也限制了,不是管理员拿不到数据,而我明明用管理员登入了,还是拿不到,刷新才拿得到数据。不刷新的时候控制台报401,Unauthorized,没有权限。

解决过程

于是问了gpt

gpt给了5种可能的原因

在这里插入图片描述

关键是第一条 问题定位到了没有accessToken 但是我一看控制台Application里面 access token没错,是有的,但是数据要刷新页面才出来,于是我继续问

我: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:
翻譯:刷新后才出现数据,可能是因为在发送请求的时候access token没有被发送,为了确保所有的请求都带有access token 需要给axios实例设置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给了一段代码 我自己再看逻辑 修改 关键就是当服务器返回401的时候,要给axios请求设置accessToken,再次发送请求;

但是这种有漏洞,

1.每次请求刚开始都返回401,request拦截之后,再次发送请求才拿到数据

2.如果accessToken过期了,请求不到数据,需求是要清除本地缓存并退出钱包登录

第2条是新增的需求,如何判断accessToken过期,GPT说如果accessToken过期,服务器会返回401,所以这里if判断服务器会返回401后的逻辑不能是重新发送请求。首先要解决第一个问题。为何每次请求都返回401?

打log,发现在连接钱包set token,token有值之前,就发送请求,所以要在连接钱包set token,确保token有值之后才发送请求,之前是判断为管理员就发送请求,这个在需求层面来将没错,但是connect wallet 设置isAdmin为true的时候还没有set token 所以在 set token之后新增 dispatch(changeSigninToTrue()); useEffect监听hasSiginin:

  useEffect(() => {if (hasSiginin) {console.log("有發送請求");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;

之后管理员连接钱包,就能拿到数据了,因为发送请求的时候 header里面有了Authorization,即有了accessToken

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5193.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员写代码与厨师做菜、音乐家作曲、诗人写诗——其实,这是一篇程序员做饭指南

与“瓶子”探讨做饭,谈到 AI robot 做饭机器人,我想,菜谱在此,结合 GPT-10 和 robot,一定是可以实现的吧。 特此记录。——禅与计算机程序设计艺术 2023.4.7 目录 前言 程序员做饭指南 基础知识——做饭基本术语 做菜专业术语 油温判断技巧及常见温度和单位换算表 附…

Chat GPT横空出世,会替代程序员吗?

现实版“moss”? 最近,科技界、金融界、教育界,都被ChatGPT刷屏了。ChatGPT突然蹿红,出乎了所有人的意料,包括团队。但大风之下,争议也随之而来。什么是ChatGPT?简单来说就是一台“地表最强聊天…

让ChatGPT帮我们CRUD、重构代码、修BUG

点击上方“Java基基”,选择“设为星标” 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应…

让ChatGPT帮我写shell脚本, 结局很感人

七问ChatGPT, 剑指shell脚本编写 step1: 初问step2: 再问step3: 三问step4: 四问step5: 五问step6: 问个derstep7: 解决问题step8: 小问一下关于ChatGPT思考 昨天浏览一篇关于脚本的技术文章的时候, 偶然看见一篇文章中写道关于mysql备份的脚本. 但是这个脚本时基于本地的MySQ…

不写代码、年薪百万,带你玩赚ChatGPT提示工程-高级提示

文章目录 前言一、Zero-Shot提示二、Few-Shot 提示Few-shot Prompting 的局限性 三、Chain-of-Thought Prompting四、Zero-Shot CoT五、Self-Consistency六、Generated Knowledge 提示七、Automatic Prompt Engineer (APE)总结 前言 随着ChatGPT的大火,提示工程在大…

ChatGpt如何注释长代码?(注释代码、添加注释)(api key)

OpenAI的GPT-3模型单次最多支持处理4096字节的会话。如果您的代码很长,导致它只能输出一半,您可以考虑以下几种解决方案: 分段发送请求:您可以将代码分为若干段,然后分别发送请求,得到每一段的注释。 使用…

为什么 ChatGPT 输出时经常会中断,需要输入“继续” 才可以继续输出?

作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏

前言 火了很长一段时间的ChatGPT、注册使用需要国外的手机号 3.1 计算机专业知识类问题 … 3.2 生活常识类 3.3 情感类 3.4 扫雷小游戏案例 package com.atguigu.java3;/*** author zyz* version 1.0* data 2023/2/20 14:42* Description:*/import java.util.Scanner;publi…

畅聊两小时后谈谈chatGPT体验感受

文章目录 背景注册聊天实录基于自然语言的SQL翻译shell解析k8s回答其他类型我的问题为何这么接近人类的回答?回答是离线的吗? 背景 最近几周不管是T还是微信公众号,大家都在疯玩这个东西。 我姑且将这个应用叫小C吧。我和小C愉快的聊了几个…

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统v1.0

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统设计与实现 一、界面设计1.1安装pyqt51.2创建用户子窗体1.3创建管理员主窗体1.4创建管理员子窗体1.5创建系统登陆界面 二、环境搭建2.1pyqt5工具配置2.2mysql5.7安装 三、编程实现3.1初始化数据库3.2创建用户数据库sdk文件…

我来泼盆冷水:正面迎击AI的时代千万别被ChatGPT割了韭菜

前言 ChatGPT从出来的时候我就一直密切关注,为此还加了不少群,用了不少套壳的程序,公司还开了专门的培训会,技术团队还为此搭建了接入ChatGPT的服务,帮助全公司的产品、商务、测试、运维、研发一起对ChatGPT做直观了解…

最新ChatGPT GPT-4 NLU实战之智能多轮对话机器人(附ipynb与python源码及视频)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(七)

目录 前言最新ChatGPT GPT-4 自然语言理解NLU实战之智能多轮对话机器人概述分类不是万物都要ChatGPT的任务对话机器人设计要点——以订餐机器人设计为例使用目的使用方法消息查询、存储消息解析实时干预更新策略 敏感性检查(非常重要)核心代码构造接口的…

ChatGPT——一个新的时代又要来临了

文章目录 ChatGPT中GPT的全称是什么ChatGPT发展历程ChatGPT能帮我们做什么快速开始 ChatGPT中GPT的全称是什么 GPT,英文全称是Generative Pre-trained Transformer,直译过来是生成型预训练-变换器,是OpenAI公司基于谷歌的Transformer语言模型…

ChatGPT万能提问技巧

ChatGPT火了这么久了,相信很多家人们都开始接触了,应该也有些家人们也要苦恼,每次提问,ChatGPT给出的回复不是自己满意的,总觉得还是缺些什么,这时候发现有效的prompt是真的很重要! 我们先看看g…

吴恩达与 OpenAI 强强联手,《ChatGPT 提示工程》中文版教程,来了!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! ChatGPT 上线至今,已经快 5 个月了,但是不少人还没真正掌握它的使用技巧。 其实,ChatGPT 的难点,在于 Prompt(提示词&#xff09…

突发!李开复宣布筹办新公司:不仅是中国版ChatGPT,全球招英才

丰色 萧箫 发自 凹非寺量子位 | 公众号 QbitAI 李开复突然宣布筹办新公司,目标大模型领域。 新公司Project AI 2.0,正式开启团队组建。 要做啥? 新公司希望打造一个平台,一个生产力应用的生态。 Project AI 2.0不仅仅要做中文版Ch…

突发!李开复宣布加入中文版ChatGPT大战!要打造AI 2.0全新平台!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自:APPSO 1123转载自 刚刚,创新工场董事长兼 CEO 李开复发朋友圈宣布成立 Project AI 2.0 公司,致力于…

chatGPT成功之道-数据

chatGPT之所以能成功,数据和模型都起了很关键的作用,这里重点说说他的数据怎么玩的,主要参考IntructGPT论文数据 prompt分类 InstructGPT论文中将prompt分为10类:生成任务、开放式QA任务、封闭式QA任务、头脑风暴、聊天、改写任…

2023 最新ChatGPT网页源码 无需KEY打开即用

买了些key放着也是放着,所以干脆集成到源码里面了,不需要大家输入key密钥就可以用,上传到宝塔搭建即可!

2023最新ChatGPT网页版源码V4.7.8版+新增回答复制功能/功能强大

正文: V4.7.8 优化公告弹出必须点击"我记住啦"才可以关闭 防止用户误触没看到公告 优化手机端输入框有时候不下滑BUG 修复后台KEY密钥自动增加BUG 新增是否开启前台客服按钮开关 新增回答复制功能 程序: wweorgs.lanzouu.com/ihg980wag13i 图片: