【发布时间】: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.email 和 url 值是空的:
[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.email 和url 值的[:] 和[:]。
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