使用用户名作为电子邮件,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 (从参数获取电子邮件)来设置电子邮件时,我仍然得到相同的结果。 好吧.. 错误消息说username
是null
。所以你应该确保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 REST Api——访问存储库中的用户详细信息