4

Devise で Rails 3.2 アプリをセットアップしています。(組み込みのルートとメソッドを介して)パスワードをリセットする場合を除いて、すべてがうまく機能します.Deviseは空白のパスワードを許可しています. 長さを検証し、少なくとも 1 つの文字があるかどうかの確認と一致するかどうかを検証します。ユーザーアカウントでパスワードを入力せずにプロファイルを更新できるように設定していますが、パスワードのリセットとは関係ないと思います。

どんな助けでも大歓迎です。

devise.rb -> http://pastie.org/3911178

user.rb -> http://pastie.org/3911187

4

2 に答える 2

7

私を正しい方向に向けてくれてありがとう。問題はあなたが説明したことによって引き起こされました。ただし、deviseに検証を処理させるか、同じコードを使用する場合、ユーザーはログインした後でもアカウントを更新するときにパスワードを入力する必要があります。これを修正するには、検証でrest_password_tokenを確認しました。

def password_required?
  # If resetting the password
  return true if reset_password_token.present? && reset_password_period_valid?

   # If the person already has a pass, only validate if they are updating pass
  if !encrypted_password.blank?
    password.present? || password_confirmation.present?
  end
end

* UPDATEパスワードトークンの有効期限が切れないように、これを更新しました。

于 2012-05-15T14:05:20.210 に答える
1

https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rbのように、devise ハンドラーのパスワード検証を行うか、devise が検証に使用しているコードを使用する必要があります。コードの問題は、ユーザーにパスワードが設定されていない場合 (!encrypted_pa​​ssword.blank?) およびその他の条件がない場合にのみ検証を行っていることです。パスワードを回復するとき、ユーザーにはすでにパスワードが設定されているため、パスワードの更新時に検証を実行しません...

于 2012-05-14T19:28:07.747 に答える