2012-07-02 5 views
11

Grails 1.3.7から2.0.4への移行後、パスワードを処理するために一時的なプロパティを使用するドメインクラスに問題があることがわかりました。しかし、Grailsの2.0.xカーネルでは、これが発生しますオブジェクトの作成時にGrailsの一時的なプロパティが取得されない

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

:1.3.7で

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'] 
    } 

これは私のブートストラップで動作するように使用:

マイドメインクラスは、この(簡体字)のように見えますpassword1とpassword2の両方がヌルであることを示すエラーが発生しました。私がしようとした場合 同じことが私のコントローラで起こる:

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

それは、私は次の回避策を行う必要があります動作させるためには:

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

これは非常に醜いです - と迷惑。

私のトランジェントの使用がgrails 2.xで無効になった場合、またはこれが何らかのフレームワークのバグである可能性がある場合、誰でも言うことができますか?

答えて

14

セキュリティ上の理由から、トランジェントは自動的にバインドされなくなりました。しかし、バインド可能な制約(「http://grails.org/doc/latest/ref/Constraints/bindable.html」を参照)を追加することで、簡単に動作させることができます。その後、これを実行する別の方法がある

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

ありがとうBurt - このセキュリティ関連の変更には意味があります。 (新しい)バインド可能な制約を認識していませんでしたか? –

+1

ちょっとバート、これは2.1.0で変更されましたか?私はまったく同じシナリオを持っており、私たちにとっては "cnfPassword"はまだnullになっています!同じ質問の新しいスレッドを開こうとしないでください:) – Sap

+2

Burtさん、Grails 2.4.3で正しく動作していません。アドバイスできる代替ソリューションはありますか? – daimon

3

Grails 2.xでのデータバインディングの改善の一部として、一時的なプロパティをバインドしないと思います。

+1

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

を変更しますか? – sttaq

関連する問題