2012-07-02 18 views
11

Po migracji z Grails 1.3.7 do 2.0.4 Zauważyłem problem z jedną z moich klas domeny, w której używam właściwości przejściowych w celu obsługi haseł.Właściwości przejściowe Graal nie zostały wykryte przy tworzeniu obiektu

Moja klasa domeny wygląda następująco (uproszczony):

package test 

    class User { 
String email 
String password1 
String password2 
//ShiroUser shiroUser 

static constraints = { 
    email(email:true, nullable:false, unique:true) 
    password1(nullable:true,size:5..30, blank: false, validator: {password, obj -> 

     if(password==null && !obj.properties['id']){ 
      return ['no.password'] 
     } 
     else return true 
     }) 
    password2(nullable:true, blank: false, validator: {password, obj -> 
     def password1 = obj.properties['password1'] 

     if(password == null && !obj.properties['id']){ 
      return ['no.password'] 
     } 
     else{ 
      password == password1 ? true : ['invalid.matching.passwords'] 
     } 
     }) 

} 
static transients = ['password1','password2'] 
    } 

W 1.3.7 to używane do pracy w moim bootstrap:

def user1= new User (email: "[email protected]", password1: "123456", password2: "123456") 
    user1.save() 

Jednak w Grails 2.0.x spowoduje w błędzie stwierdzając, że hasło 1 i hasło 2 mają wartość NULL. To samo dzieje się w moich kontrolerami jeśli staram się robić:

def user2= new User (params)// params include email,password1 and password2 

Aby to działało muszę zrobić następujące obejście:

def user2= new User (params)// params include email,password1 and password2 
    user2.password1=params.password1 
    user2.password2=params.password2 
    user2.save() 

Jest to dość brzydkie - i denerwujące.

Czy ktoś może powiedzieć, czy moje używanie transjentów stało się nieważne w grails 2.x, czy może to jakiś rodzaj jakiegoś błędu ramowego?

Odpowiedz

14

Ze względów bezpieczeństwa dane przejściowe nie są już automatycznie wiązane. Ale możesz łatwo sprawić, by działało, dodając ograniczenie "wiążące" (patrz http://grails.org/doc/latest/ref/Constraints/bindable.html). Zmień

password2(nullable:true, blank: false, validator: {password, obj -> 

do

password2(bindable: true, nullable:true, blank: false, validator: {password, obj -> 
+0

Dzięki Burt - ma sens z tą zmianą związaną z bezpieczeństwem. Po prostu nie wiedział o (nowym?) "Wiążącym" ograniczeniu. –

+1

Hej, Burt, czy to zmieniło się w wersji 2.1.0? Mam dokładnie taki sam scenariusz i dla nas "cnfPassword" nadal jest zerowe! Nie chcę otwierać nowego wątku dla tego samego pytania :) – Sap

+2

Witam Burt, nie działa poprawnie w grailsach 2.4.3. Czy istnieje jakieś alternatywne rozwiązanie, które możesz doradzić? – daimon

3

Myślę, że jako część poprawy wiązania danych w grails 2.x - nie będzie wiązać właściwości przejściowych.

+1

istnieje alternatywny sposób to zrobić? – sttaq