Jhipster 使用电子邮件而不是用户名登录

Posted

技术标签:

【中文标题】Jhipster 使用电子邮件而不是用户名登录【英文标题】:Jhipster login with email instead of username 【发布时间】:2019-03-25 21:03:45 【问题描述】:

我使用 Jhipster 创建应用程序。默认情况下,它使用用户名+密码的组合登录。我想创建电子邮件+密码登录,这样我就可以使用户名不唯一。最好的方法是什么?

我正在使用 JWT。

【问题讨论】:

复制:***.com/questions/28739550/… 编辑了我的帖子。它没有重复,因为我使用的是 JWT 而不是 Oauth2 github.com/jhipster/generator-jhipster/issues/… 【参考方案1】:

默认情况下,登录字段用于将用户登录到应用程序。但是对于最后一个 JHipster 版本(我不确定它是从哪个版本开始实施的),您可以通过电子邮件记录用户。

在 DomainUserDetailsS​​ervice.java 中:

    public UserDetails loadUserByUsername(final String login) 
    log.debug("Authenticating ", login);

    if (new EmailValidator().isValid(login, null)) 
        return userRepository.findOneWithAuthoritiesByEmail(login)
            .map(user -> createSpringSecurityUser(login, user))
            .orElseThrow(() -> new UsernameNotFoundException("User with email " + login + " was not found in the database"));
    

    String lowercaseLogin = login.toLowerCase(Locale.ENGLISH);
    return userRepository.findOneWithAuthoritiesByLogin(lowercaseLogin)
        .map(user -> createSpringSecurityUser(lowercaseLogin, user))
        .orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database"));


但是登录仍然是唯一的,就像邮件一样,名字和姓氏不是。即使您有旧版本的 JHipster,我也很确定您可以添加此代码以支持电子邮件和登录身份验证。

使用 JWT 和最新的 JHipster 版本进行测试!

【讨论】:

问题是我需要登录不是唯一的,如果我使用用户名删除登录,社交网络将无法正常工作 我不确定您为什么要这样做,但没关系。如果您想登录不是唯一的,您应该删除 sql 约束并更新 user.java 实体中的 JPA 注释。如果应用程序已经在某个环境中运行,请务必创建一个新的更改日志,而不是修改原始日志。 好吧,我想让人们拥有相同的用户名。

以上是关于Jhipster 使用电子邮件而不是用户名登录的主要内容,如果未能解决你的问题,请参考以下文章

用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名

ember简单auth用rails设计用户名而不是电子邮件?

Django:创建电子邮件登录字段而不是用户名后,超级用户和用户无法登录到管理员和用户页面

Jhipster 向用户注册添加更多字段

Django - 使用电子邮件登录

从登录用户 Django 发送电子邮件