使用用户名作为电子邮件,Spring Security UI 插件

Posted

技术标签:

【中文标题】使用用户名作为电子邮件,Spring Security UI 插件【英文标题】:Use username as email, Spring Security UI plugin 【发布时间】:2012-12-12 18:40:25 【问题描述】:

我将 Spring Security 插件与 Spring Security UI 插件结合使用。

他们都像一个魅力,但我的问题是我不希望我的用户有一个用户名,而是他/她应该使用电子邮件作为用户名。

所以在注册阶段我尝试从注册页面和设置中删除用户名

newUser.username = params.email

这样插件仍然可以访问变量用户名,但这给了我验证错误,我只是想不出解决它的方法。

有什么想法吗?有没有人做过类似的事情?

【问题讨论】:

你得到什么样的验证错误? 这是我得到的第一个错误:“字段 'username' 上的对象 'grails.plugins.springsecurity.ui.RegisterCommand' 中的字段错误:拒绝值 [null];”当我尝试通过执行 user.username = params.email (从参数获取电子邮件)来设置电子邮件时,我仍然得到相同的结果。 好吧.. 错误消息说usernamenull。所以你应该确保params.email中有一个有效的电子邮件 是的,我明白这一点,但即使我在将用户名设置为电子邮件后打印出参数,它也会失败。当我验证域类时,我仍然会收到该错误。 【参考方案1】:

可以修改spring security使用的默认User字段

在您的 Config.groovy 中添加以下内容

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

其中 XXX 是要使用的用户实体的字段

可以查看配置属性here

【讨论】:

AAA 级链接!听起来很合理,但是当我使用 UI 插件时,有一些内部类,例如注册命令,使用“用户名”。它也用于忘记密码和帐户确认。也许我应该删除用户名的每一个痕迹,但我害怕的是某处期望用户名应该存在的东西。 你很可能已经看过this,在这个(过时的)线程中有相同的代码示例,关于如何使用带有自定义用户类的spring security UI。【参考方案2】:

我最近通过将视图和控制器从 spring 安全插件复制到我的 grails-app 并更新视图以显示 emailAddress 与用户名相反来完成此操作。我还在用户域类中用 emailAddress 替换了 username 属性。确保按如下方式更新约束:

static constraints = 
    emailAddress email: true, blank: false, unique: true
    password blank: false, password: true

dimcookies 的建议是正确的并且适用于旧版本的 Grails,新的语法配置,至少对于 Grails 2.3.1,是:

grails.plugin.springsecurity.userLookup.usernamePropertyName = 'emailAddress'

【讨论】:

以上是关于使用用户名作为电子邮件,Spring Security UI 插件的主要内容,如果未能解决你的问题,请参考以下文章

BCryptPasswordEncoder 未作为 spring-boot-starter-security 的一部分导入

Spring Security 的用户名别名

Spring REST Api——访问存储库中的用户详细信息

Spring Boot 使用 Thymeleaf 作为模板发送电子邮件 - 配置不起作用

Spring boot JPA - 使用额外的列查询多对多

使用用户名或电子邮件的 Spring Security