Я ищу переход от использования комбинации имени пользователя/пароля для аутентификации в приложении Grails с использованием электронной почты/пароля. Я попытался внести изменения в AuthControler.groovy и ShiroDbReal.groovy, чтобы разрешить это, но он не позволяет мне войти в систему.Использование адреса электронной почты в качестве уникального идентификатора вместо имени пользователя с помощью Shiro for Grails
Вот моя модель класса
class User {
String email
String passwordHash
byte[] passwordSalt
static belongsTo = Account
static hasMany = [ roles: Role, permissions: String ]
static constraints = {
email (nullable: false, blank: false, unique: true)
}
}
Вот моя функция AuthController зарегистрировались
def signIn = {
def authToken = new UsernamePasswordToken(params.email, params.password as String)
if (params.rememberMe) {
authToken.rememberMe = true
}
def targetUri = params.targetUri ?: "/"
def savedRequest = WebUtils.getSavedRequest(request)
if (savedRequest) {
targetUri = savedRequest.requestURI - request.contextPath
if (savedRequest.queryString) targetUri = targetUri + '?' + savedRequest.queryString
}
try{
SecurityUtils.subject.login(authToken)
redirect(uri: targetUri)
}
catch (AuthenticationException ex){
log.info "Authentication failure for user '${params.username}'."
flash.message = message(code: "login.failed")
redirect(action: "login", params: m)
}
}
Наконец мой ShiroDbReal.groovy
def authenticate(authToken) {
log.info "Attempting to authenticate ${authToken.username} in DB realm..."
def email = authToken.username
if (email == null) {
throw new AccountException("Null usernames are not allowed by this realm.")
}
def user = User.findByEmail(email)
if (!user) {
throw new UnknownAccountException("No account found for user [${username}]")
}
log.info "Found user '${user.username}' in DB"
def account = new SimpleAuthenticationInfo(email, user.passwordHash, new SimpleByteSource(user.passwordSalt), "ShiroDbRealm")
if (!credentialMatcher.doCredentialsMatch(authToken, account)) {
log.info "Invalid password (DB realm)"
throw new IncorrectCredentialsException("Invalid password for user '${username}'")
}
return account
}
Я ПОЛУЧАТЬ в «groovy.lang .MissingPropertyException: Нет такого свойства: имя пользователя для класса: исключение icango.User в отладчике на th e 'SecurityUtils.subject.login (authToken)' вызов метода.
Я не уверен, где еще искать, потому что я не могу найти документацию об изменении уникального идентификатора. Любая помощь будет действительно оценена.
Поскольку запись была отключена, я не думал, что эти утверждения будут оценены, я был неправ. Спасибо за головы. –