【问题标题】:Grails 3 Spring Security UI Forgotten Password blank URL & userGrails 3 Spring Security UI忘记密码空白URL和用户
【发布时间】:2016-08-12 23:38:06
【问题描述】:

我已自定义 grails.plugin.springsecurity.userLookup.usernamePropertyName = "email",但电子邮件正文的默认呈现行为将失败:

No such property: username for class

因此我在我的application.groovy 中自定义了emailBody

grails.plugin.springsecurity.ui.forgotPassword.emailBody = "Dear ${user.email} , Please follow <a href='${url}'>this link</a> to reset your password. This link will expire shortly."

因为根据文档:

emailBody 属性应该是一个 GString 并且将在用户变量的范围内包含用户域类实例,以及生成的 url 以单击以重置 url 变量中的密码。

但是,包含 MailStrategy 中属性的参数映射对于 user.emailurl 值是空的:

[to:blah@blah.com, 
 from:no-reply@blah.com, subject:Reset your password for your account,
 html:Dear [:], Please follow <a href='[:']>this link</a> to reset your password. This link will expire shortly.]

注意user.emailurl 值的[:][:]

spring-security 插件在application.groovy 中配置了这些值:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'blah.Account' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'blah.AccountRole' 
grails.plugin.springsecurity.authority.className = 'blah.Role' 
grails.plugin.springsecurity.requestMap.className = 'blah.Requestmap'     
grails.plugin.springsecurity.securityConfigType   = 'Annotation'

Account 类定义为:

String email
String password
Date emailVerified = null
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired

Set<Role> getAuthorities() {
    AccountRole.findAllByAccount(this)*.role
}

def beforeInsert() {
    encodePassword()
}

def beforeUpdate() {
    if (isDirty('password')) {
        encodePassword()
    }
}

protected void encodePassword() {
    password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password
}

static transients = ['springSecurityService']

static constraints = {
    password blank: false, password: true
    email blank: false, unique: true
    emailVerified nullable: true
}

static mapping = {
    password column: '`password`'
}

我怎样才能获得用户名,更重要的是为我呈现的 URL,以便我可以发送忘记密码的电子邮件?

【问题讨论】:

  • 显示您的用户域类。

标签: grails spring-security grails-3.1


【解决方案1】:

GString 应该从 " 开始,而不是从 '

所以而不是grails.plugin.springsecurity.ui.forgotPassword.emailBody = '...'

你应该使用:grails.plugin.springsecurity.ui.forgotPassword.emailBody = "..."

【讨论】:

  • 这很可能只是编辑问题时的格式错误。让我检查一下……
  • 格式错误,它是使用“定义的。更新的帖子包含更多信息
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 2014-01-09
  • 2012-02-01
  • 2015-10-19
  • 2016-07-25
  • 1970-01-01
  • 2011-11-11
  • 2015-06-29
相关资源
最近更新 更多