网站宣传文案范例,网站如何绑定虚拟主机,深圳网站制作网络建设公司,免费行情软件下载入口记一次Bug排查
今日在做尚硅谷的商品甄选项目时#xff0c;遇到无法登录的问题#xff1a;报错Uncaught (in promise) Error: Infinite redirect in navigation guard
一开始我去搜CSDN#xff0c;都说是路由的问题#xff0c;我对前端也不了解#xff0c;试着改了一下遇到无法登录的问题报错Uncaught (in promise) Error: Infinite redirect in navigation guard
一开始我去搜CSDN都说是路由的问题我对前端也不了解试着改了一下发现没有用。我怀疑是前端包的问题于是我重新下载解压了若干次资料中的前端包 —— 最原始的模板下载完依赖的模板甚至所有前端代码都写完的代码都还是那个问题。
前端模板刚拿过来时好用的但在进行了一系列修改后就出现登录界面一直转圈进不去报错的问题了。我从头开始重复每一步的修改然后去看界面有没有问题。
我注意到当我修改完后端接口并把api路径修改为自己的路径后就出现错误了。这时我才想起来打开F12查看Network发现getUserinfo这个接口被调了10多次我发现问题不对了明明只点击了一次登录为什么会调这么多次。
我去前端代码里搜寻getUserinfo这个接口的调用发现有这样一段代码
if (!userinfo) {try {// 获取用户信息await getUserinfo()} catch (err) {loadingInstance.close()return false}return to.fullPath
}这段代码当userinfo为空时就会一直调用getUserinfo()这个方法难道我获取userinfo都是空吗于是在控制台打印userinfo竟然真的是清一色的null!
看来是后端出了问题我再到后端去看后端有一个controller返回的用户信息是SysUser类
GetMapping(/getUserInfo)public ResultSysUser getUserInfo(RequestHeader(name token) String token) {// 1.从请求头获取token// 2.根据token从redis查询用户信息SysUser sysUser sysUserService.getUserInfo(token);// 3.返回用户信息return Result.ok(sysUser);}于是我进行sysUser的打印果然也为空我继续追溯到sysUserService服务中的getUserInfo()方法这个方法是根据token从redis中查询到存储的用户信息。
public SysUser getUserInfo(String token) {//redis取数据String userJson redisTemplate.opsForValue().get(RedisKeyEnum.USER_LOGIN token);System.out.println(userJson:userJson);return JSON.parseObject(userJson, SysUser.class);}乍一看我还没发现这个get()方法有啥问题但当我与上面写的redis的set()方法作对比时恍然大悟
// redis存数据
redisTemplate.opsForValue().set(RedisKeyEnum.USER_LOGIN.getValue() token,JSON.toJSONString(sysUser),7, TimeUnit.DAYS);发现没key不一样
在set的时候是RedisKeyEnum.USER_LOGIN.getValue()而在get的时候就忘了加getValue()了,结果当然不对自然就查不到对应的用户信息前端自然会出问题了。
到头来还是个低级错误啊。。。 所以在自己做项目时界面上出现了问题第一反应是看后端请求有没有问题而不是抓着前端不放后台管理项目的前端大部分都是既定模板只要修改正确不会出啥问题往往后端的一些小纰漏才是问题的根源。