You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot:登录用户更新邮箱/手机号后如何更新信息并刷新登录凭据

解决用户更新登录凭证(邮箱/手机号)后的登录问题

针对更新邮箱/手机号后出现UsernameNotFoundException的问题,按以下步骤排查解决:

1. 确认数据持久化是否生效

  • 检查更新个人信息的接口是否开启事务(添加@Transactional注解),确保更新操作成功提交到数据库。
  • 更新完成后直接查询数据库,验证新的邮箱/手机号是否已正确存储,排除数据未持久化的问题。

2. 修正用户查询逻辑

  • 检查UserDao中的findByEmailOrPhone方法:
    • 确保SQL查询用OR连接邮箱和手机号的条件,且处理大小写问题(邮箱不区分大小写)。如果是JPA方法名,应改为findByEmailIgnoreCaseOrPhoneIgnoreCase(String email, String phone)。
    • 修正后的CustomUserDetailsService示例:
@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:45:37