总结的避坑点
来源:6-10 前端集成 ---源码解析和验证多因子登录

绮想曲
2023-07-30
从开始到现在都是跟着手敲的,除了几个老师没提过的类是从源代码里拷贝过来,学到现在,感觉有点吃力,总结了几个避坑点:
1.前端登录,访问/authorize/token接口时,我是把userService.updatePassword(user, loginDto.getPassword())升级密码这个注释了,因为我发现走到userRepo.save(u.withPassword(passwordEncoder.encode(newPassword)))时,就算我数据库的密码已经是bcrypt的加密格式了,它仍然会给我更新,导致数据库密码变更,原因我没弄清楚。
2.同样是在login方法中,userCacheService.cacheUser(user)时,这时候存入缓存的是加密后的密码,我登录时一直匹配不上,从源码一步步调试发现,当二次验证调用verifyTotp方法时→passwordEncoder.matches(password, user.getPassword())→BCryptPasswordEncoder类中的BCrypt.checkpw(rawPassword.toString(), encodedPassword)方法,再走到equalsNoEarlyReturn(hashed, hashpw(plaintext, hashed))方法,这里的plaintext就是前端传过来的密码,hashed就是从缓存中取得密码,但是如果是加密后的,会导致hashpw(plaintext, hashed)之后两者匹配不上,所以我在userCacheService.cacheUser(user)时,直接用铭文密码替换掉了,这才成功匹配上。
3.User实体类要加上@JsonIgnoreProperties(value = {“authorities”}),否则会报懒加载异常,至少我是报了这个异常,有相同情况的小伙伴可以加上试试。
4.在这一节末尾,老师进入前端首页,可以看到table中是有数据库的两条user信息的,但是我进入之后没有,看了下前端代码,发现通过
ADMIN_AXIOS.get("/users", {
params: { page, offset, sort, …filters },
})获取的后端数据,但是这个ADMIN_AXIOS请求的是/admin路径,可是AdminResource在chap08里才有,chap06
里根本就没有。。。。。。。
暂且就这么多,感觉这门课程还是一上来就把代码拉下来,照着视频看吧,也别敲了,会发现要自己在后面章节的源代码里找很多这章缺失的文件,对手敲党很不友好。
1回答
-
接灰的电子产品
2023-08-01
有缺失的地方,我后面看看有时间修正一下
00
相似问题