Grails Spring Security 使用电子邮件登录

Posted

技术标签:

【中文标题】Grails Spring Security 使用电子邮件登录【英文标题】:Grails Spring Security use email to login 【发布时间】:2012-08-19 13:43:58 【问题描述】:

我的用户域类扩展了 SecUser。

用户有一个属性“电子邮件”。

Spring security 使用 SecUser 的“用户名”登录。

我需要使用“电子邮件”登录。有没有办法做到这一点?

编辑(来自已接受的答案):

我删除了 SecUser 的 username 属性并添加了 email 属性。

然后我在 Config.groovy 中添加了这一行:

grails.plugins.springsecurity.userLookup.usernamePropertyName = 'email'

【问题讨论】:

【参考方案1】:

RTFM 我的朋友 :)

http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html#4.1%20Person%20Class

userLookup.usernamePropertyName 'username'  User class username field

添加到 Config.grooy:

grails.plugins.springsecurity.userLookup.usernamePropertyName='email'

较新版本的 grails 使用前缀为

grails.plugin.springsecurity 而不是grails.plugins.springsecurity

【讨论】:

首先,我修改了答案在插件配置文件中提到的行。显然,该文件没有版本化。然后,我意识到我必须覆盖 Config.groovy 文件中的配置。我添加了以下内容:grails.plugins.springsecurity.userLookup.usernamePropertyName = 'email' 仅供参考,在 Spring Security 的更新版本中,前缀已更改。 "您的安全配置设置使用旧前缀 'grails.plugins.springsecurity' 但现在必须使用 'grails.plugin.springsecurity'" 感谢@EdJ,我已将其添加到我的答案中【参考方案2】:

如果您还使用 Spring Security UI 插件,请注意忘记密码和用户注册电子邮件的默认文本引用用户名字段。

您可以像这样覆盖它们:

grails.plugins.springsecurity.ui.register.emailBody = 'Hi \$user.firstName...'
grails.plugins.springsecurity.ui.forgotPassword.emailBody = 'Hi \$user.firstName...'

【讨论】:

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

Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密

使用 Spring Security Grails 插件编码密码

Grails + spring-security-core:用户登录后如何分配角色?

在 Grails 中使用 Pre/Post Spring-Security Annotations

Grails 3.0 和 Spring Security

Grails - 卸载 Spring Security Core