0

password と password_confirm フィールドを含む Domain クラスがあります。これら 2 つは個別に検証されます。これら 2 つが等しいという検証を作成するためのベスト プラクティスは何ですか?

4

2 に答える 2

4
class User {

  String password
  String passwordConfirm


  static constraints = {
    password blank: false, nullable: false, minSize: 8, maxSize: 64, validator: {password, obj ->
      def password2 = obj.passwordConfirm
      password2 == password ? true : ['invalid.matchingpasswords']
    }
  }

}

次に、messages.properties ファイルに以下を追加します...

User.password.invalid.matchingpasswords=Passwords do not match

user.save() または user.validate() が呼び出されると、これが自動的にトリガーされます。

于 2013-11-14T16:15:31.367 に答える
1

Grails 用のセキュリティ プラグイン、おそらく Shiro または Spring Security Core を使用することをお勧めします。

Spring Security Coreのドキュメントには、パスワードを変更する例があります。

def updatePassword = {
   String username = session['SPRING_SECURITY_LAST_USERNAME']
   if (!username) {
      flash.message = 'Sorry, an error has occurred'
      redirect controller: 'login', action: 'auth'
      return
   }
   String password = params.password
   String newPassword = params.password_new
   String newPassword2 = params.password_new_2
   if (!password || !newPassword || !newPassword2 || newPassword != newPassword2) {
      flash.message = 'Please enter your current password and a valid new password'
      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
      return
   }

   User user = User.findByUsername(username)
   if (!passwordEncoder.isPasswordValid(user.password, password, null /*salt*/)) {
      flash.message = 'Current password is incorrect'
      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
      return
   }

   if (passwordEncoder.isPasswordValid(user.password, newPassword, null /*salt*/)) {
      flash.message = 'Please choose a different password from your current one'
      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
      return
   }

   user.password = newPassword
   user.passwordExpired = false
   user.save() // if you have password constraints check them here

   redirect controller: 'login', action: 'auth'
}
于 2013-11-14T16:16:33.940 に答える