12

Grails 1.3.7から2.0.4に移行した後、パスワードを処理するために一時的なプロパティを使用するドメインクラスの1つに問題があることに気付きました。

私のドメインクラスは次のようになります(簡略化):

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

1.3.7では、これは私のBootstrapで機能していました。

    def user1= new User (email: "test@test.com", password1: "123456", password2: "123456")
    user1.save()

ただし、Grails 2.0.xでは、これにより、password1とpassword2の両方がnullであるというエラーが発生します。私がやろうとすると、同じことが私のコントローラーでも起こります:

    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でトランジェントの使用が無効になったかどうか、またはこれが何らかのフレームワークのバグである可能性があるかどうかを誰かが言うことができますか?

4

2 に答える 2

15

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

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

password2(bindable: true, nullable:true, blank: false, validator: {password, obj ->
于 2012-07-02T17:09:42.350 に答える
3

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

于 2012-07-02T16:20:19.833 に答える