Я пытаюсь добавить дополнительные поля в поля регистрации пользователя, предоставленные плагином. Я считаю, что переопределение RegisterController - это правильный подход для добавления дополнительных полей (исправьте меня, если я ошибаюсь). Я создал новый RegisterController.groovy из исходного файла со следующим содержимым. На данный момент я не добавил новые свойства поля, просто пытаюсь имитировать то, что делает плагин.Grails Spring Security UI Регистрация Дополнительные поля
package myPackage
import grails.plugin.springsecurity.authentication.dao.NullSaltSource
import grails.plugin.springsecurity.ui.CommandObject
import grails.plugin.springsecurity.ui.RegistrationCode
import grails.plugin.springsecurity.ui.strategy.MailStrategy
import grails.plugin.springsecurity.ui.strategy.PropertiesStrategy
import grails.plugin.springsecurity.ui.strategy.RegistrationCodeStrategy
class RegisterController extends grails.plugin.springsecurity.ui.RegisterController {
static defaultAction = 'register'
def saltSource
MailStrategy uiMailStrategy
RegistrationCodeStrategy uiRegistrationCodeStrategy
PropertiesStrategy uiPropertiesStrategy
def register(RegisterCommand registerCommand) {
if (!request.post) {
return [registerCommand: new RegisterCommand()]
}
if (registerCommand.hasErrors()) {
return [registerCommand: registerCommand]
}
def user = uiRegistrationCodeStrategy.createUser(registerCommand)
String salt = saltSource instanceof NullSaltSource ? null : registerCommand.username
RegistrationCode registrationCode = uiRegistrationCodeStrategy.register(user, registerCommand.password, salt)
if (registrationCode == null || registrationCode.hasErrors()) {
// null means problem creating the user
flash.error = message(code: 'spring.security.ui.register.miscError')
return [registerCommand: registerCommand]
}
sendVerifyRegistrationMail registrationCode, user, registerCommand.email
[emailSent: true, registerCommand: registerCommand]
}
}
class RegisterCommand implements CommandObject {
protected static Class<?> User
protected static String usernamePropertyName
String username
String email
String password
String password2
static constraints = {
username validator: { value, command ->
if (!value) {
return
}
if (User.findWhere((usernamePropertyName): value)) {
return 'registerCommand.username.unique'
}
}
email email: true
password validator: RegisterController.passwordValidator
password2 nullable: true, validator: RegisterController.password2Validator
}
}
Когда я запускаю эту программу, я получаю сообщение об ошибке
Cannot invoke method findWhere() on null object.
Любая идея, чтобы решить эту проблему, было бы весьма признателен.
Вы хотите, чтобы дополнительные поля были постоянными в db, в классе User domain? –
да, это цель. Мне также нужно выяснить, как сделать страницу регистрации привязанной к ограничениям класса домена пользователя. – elixir