Spring Boot:登录用户更新邮箱/手机号后如何更新信息并刷新登录凭据
解决用户更新登录凭证(邮箱/手机号)后的登录问题
针对更新邮箱/手机号后出现UsernameNotFoundException的问题,按以下步骤排查解决:
1. 确认数据持久化是否生效
- 检查更新个人信息的接口是否开启事务(添加
@Transactional注解),确保更新操作成功提交到数据库。 - 更新完成后直接查询数据库,验证新的邮箱/手机号是否已正确存储,排除数据未持久化的问题。
2. 修正用户查询逻辑
- 检查
UserDao中的findByEmailOrPhone方法:- 确保SQL查询用
OR连接邮箱和手机号的条件,且处理大小写问题(邮箱不区分大小写)。如果是JPA方法名,应改为findByEmailIgnoreCaseOrPhoneIgnoreCase(String email, String phone)。 - 修正后的
CustomUserDetailsService示例:
- 确保SQL查询用
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return this.users.findByEmailIgnoreCaseOrPhoneIgnoreCase(username, username) .orElseThrow(() -> new UsernameNotFoundException("Username: " + username + " not found")); }
3. 处理JWT令牌失效问题
- 如果系统使用JWT认证,更新登录凭证后需强制旧令牌失效:
- 在更新接口中,将用户当前的JWT令牌加入黑名单,禁止后续使用。
- 返回提示信息,要求用户使用新的邮箱/手机号重新登录,获取新的有效令牌。
4. 确保User实体的UserDetails实现正确
- 检查User实体的
getUsername()方法,确保返回的是当前的邮箱或手机号(而非固定旧值),Spring Security会依赖该方法获取用户标识进行登录验证。
内容的提问来源于stack exchange,提问作者Rakhi
相关产品推荐
相关产品推荐

