2017-01-06 4 views
1

Я использую Grails 3.2.4 и пытаюсь использовать свойство email моего класса User в качестве имени пользователя для регистрации.Grails - Spring Security UI Электронная почта для пользователя

До сих пор мне удалось получить Spring Security Ядро для использования электронной почты в качестве имени пользователя, используя настройки ниже конфигурации:

grails.plugin.springsecurity.userLookup.usernamePropertyName='email' 

Однако функциональные возможности регистрации, кажется, не принимать во внимание и не позволит мне зарегистрировать нового пользователя, используя только адрес электронной почты и пароль.

Я сделал несколько попыток переопределить RegisterController, но я продолжаю испытывать различные ошибки в отношении нулевых имен пользователей.

Похоже, что мне не хватает чего-то очень простого. Любая помощь/направление приветствуются.

+0

проверочных ограничений в классе домена пользователя для атрибута имени пользователя - если БД уже создана ранее и был nullable false, и вы изменили его на true после - тогда для изменения столбца изменения таблицы необходимо присвоить значение null. Вы даете надзор без каких-либо фактических кодов или сообщений об ошибках - трассировки или что-либо для любого, чтобы дать вам что-нибудь полезное на – Vahid

+0

Спасибо @vahid, Никаких следов не было необходимо для моего вопроса, поскольку я спрашивал, как сделать регистрационную функцию весной-безопасностью -ui используйте электронную почту как имя пользователя. –

ответ

1

Похоже, что в версии spring-security-ui-3.0.0.M2 свойство username не может быть переопределяемым.

String paramNameToPropertyName(String paramName, String controllerName) { 
    // Properties in the ACL classes and RegistrationCode aren't currently 
    // configurable, and the PersistentLogin class is generated but its 
    // properties also aren't configurable. Since this method is only by 
    // the controllers to be able to hard-code param names and lookup the 
    // actual domain class property name we can short-circuit the logic here. 
    // Additionally there's no need to support nested properties (e.g. 
    // 'aclClass.className' for AclObjectIdentity search) since those are 
    // not used in GSP for classes with configurable properties. 

    if (!paramName) { 
     return paramName 
    } 

    Class<?> clazz = domainClassesByControllerName[controllerName] 
    String name 
    if (clazz) { 
     String key = paramName 
     if (paramName.endsWith('.id')) { 
      key = paramName[0..-4] 
     } 
     name = classMappings[clazz][key] 
    } 
    name ?: paramName 
} 

PS я получаю вокруг этого сейчас делать что-то вроде этого в моем пользовательском классе домена:

static transients = ["migrating"]] 
String username = null 

public void setEmail(String email) { 
    this.email = email 
    this.username = email 
} 
+0

Спасибо! Именно эту информацию я искал. –

Смежные вопросы