2012-07-02 34 views
11

Sau khi di chuyển từ Grails 1.3.7 đến 2.0.4, tôi đã nhận thấy có vấn đề với một trong các lớp miền của tôi nơi tôi sử dụng các thuộc tính tạm thời để xử lý mật khẩu.Các thuộc tính tạm thời của Grails không được chọn đối tượng tạo ra

lớp miền của tôi trông như thế này (giản thể):

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

Trong 1.3.7 này đã từng làm việc trong Bootstrap của tôi:

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

Tuy nhiên, trong Grails 2.0.x này sẽ cho kết quả trong lỗi nói rằng password1 và password2 đều là null. Điều tương tự cũng xảy ra trong các bộ điều khiển của tôi nếu tôi cố gắng làm:

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

Để làm cho nó hoạt Tôi có thực hiện giải pháp sau đây:

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

này là khá xấu xí - và gây phiền nhiễu.

Bất cứ ai có thể nói nếu việc sử dụng transients của tôi đã trở thành không hợp lệ trong grails 2.x, hoặc nếu điều này có thể là một lỗi khuôn khổ của một số loại?

Trả lời

14

Vì các lý do bảo mật, chuyển tiếp không còn bị tự động giới hạn. Nhưng bạn có thể dễ dàng làm cho nó hoạt động bằng cách thêm vào một ràng buộc 'ràng buộc' (xem http://grails.org/doc/latest/ref/Constraints/bindable.html). Thay đổi

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

để

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

Cảm ơn Burt - Làm cho cảm giác tốt với sự thay đổi liên quan đến bảo mật này. Chỉ là không nhận thức được ràng buộc (mới?) 'Ràng buộc' được. –

+1

Hey Burt, điều này có thay đổi trong 2.1.0 không? Tôi có một kịch bản chính xác và cho chúng tôi "cnfPassword" vẫn đến như là null! Không muốn mở một chủ đề mới cho cùng một câu hỏi :) – Sap

+2

Xin chào Burt, nó không hoạt động đúng trong grails 2.4.3. Có giải pháp thay thế nào mà bạn có thể tư vấn không? – daimon

3

Tôi nghĩ là một phần của cải thiện ràng buộc dữ liệu trong grails 2.x - nó sẽ không ràng buộc các thuộc tính tạm thời.

+1

là có một cách khác để làm điều này sau đó? – sttaq

Các vấn đề liên quan