2012-06-19 31 views
5

Tôi đang phát triển lớp người dùng trong ứng dụng thang máy của mình và đã phát triển hai biểu mẫu, một cho đăng ký người dùng và một cho đăng nhập người dùng.Xác thực Ad-hoc cho trường Ghi trong Nâng

Tôi có lớp theo dõi người dùng:

class MongoUser private() extends MongoRecord[MongoUser] 
    with MongoId[MongoUser] { 

    def meta = MongoUser 

    object firstname extends StringField(this, "") 
    object lastname extends StringField(this, "") 
    object password extends PasswordField(this, "") 
    object email extends EmailField(this, 90) 
    object business extends StringField(this, "") 

    /* 
    * validation method for checking email is unique 
    */ 
    protected def emailUnique(emailVal:String) = { 
     meta.findAll("email", emailVal) match { 
     case Nil => Nil 
     case _ => List(FieldError(email, "Email should be unique")) 
     } 
    } 
} 

Và hai màn hình sau đây:

object SignupWizard extends Wizard { 
    object user extends WizardVar(MongoUser.createRecord) 

    val person = new Screen { 

    addFields(() => user.is.firstname) 
    addFields(() => user.is.lastname) 
    addFields(() => user.is.password) 
    addFields(() => user.is.email) 


    override def nextScreen = { 
     //user.is.save 
     business 
    } 
    } 

    val business = new Screen { 
    addFields(() => user.is.business) 
    } 

    def finish() { 
    user.is.save 
    } 

} 

/* 
*Screen for user login 
*/ 

object LoginScreen extends LiftScreen { 
    object user extends ScreenVar(MongoUser) 

    addFields(() => user.is.email) 
    addFields(() => user.is.password) 


    def finish() { 
    S.notice(
     user.is.login(
     user.email.toString, 
     user.password.toString).toString) 
    } 

} 

tôi cần phải chắc chắn rằng trong màn hình SignupWizard, địa chỉ email là duy nhất. Tôi có thể thực hiện việc này bằng cách thay đổi trường email trong lớp MongoUser như sau:

object email extends EmailField(this, 90) { 
     override def validations = { 
     emailUnique _ :: 
     super.validations 
     } 
} 

Nhưng điều đó bây giờ có nghĩa là quy tắc xác thực cũng được áp dụng khi đăng nhập.

Câu hỏi: Cách hiệu quả nhất để thêm quy tắc xác thực đặc biệt vào trường MongoUser của tôi trong các màn hình khác nhau là gì?

Trả lời

0

Đừng để xác nhận trong câu hỏi trong Ghi ở tất cả, và sử dụng một lĩnh vực tùy chỉnh trong Wizard:

object wizard extends Wizard { 
    // don't add the email field with addField() 
    val email = field("Email", user.is.email.is, trim, emailUnique _, ...) 
} 
Các vấn đề liên quan