圣杯 3 弹簧安全 UI 忘记密码空白 URL 和用户



我已经自定义了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,并且在User变量中包含User域类实例,在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呈现给我,所以我可以发送忘记密码的电子邮件?

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

所以代替grails.plugin.springsecurity.ui.forgotPassword.emailBody = '...'

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

最新更新