7

ユーザーがアカウントを作成したり、ログインしたりできる基本的な Ruby on Rails 4 プロジェクトを作成しています...組み込みを使用しhas_secure_passwordてパスワードを管理しています。ユーザーがパスワードを 2 回入力する必要はありません (つまり、password_confirmation入力フォーム フィールドと対応するモデル属性が必要です)。password_confirmationそのため、チェック/要件をオフにする方法を探しています。

潜在的な解決策を提供するこの回答を見つけましたが、元の質問は十分に異なっているため、個別に確認したいと思います。ユーザーモデルを更新して以下を追加することをお勧めします。

class User < ActiveRecord::Base

  # ...

  has_secure_password validations: false
  validates :password, presence: true, length: { minimum: 6 }

end

これは機能しているようで、RSpec テストに合格できます。私の2つの部分の質問は次のとおりです。

  1. このアプローチに悪影響やセキュリティ上の問題はありますか?
  2. password_confirmation「The Ruby Way」に沿った、より安全なオフにする別の方法はありますか?
4

3 に答える 3

2

ActiveModel::SecurePasswordを見ると、has_secure_password によって作成された検証が表示されます。

if options.fetch(:validations, true)
      validates_confirmation_of :password, if: :should_confirm_password?
      validates_presence_of     :password, on: :create
      validates_presence_of     :password_confirmation, if: :should_confirm_password?

      before_create { raise "Password digest missing on new record" if password_digest.blank? }
end

検証を無効にすることで、 field のチェックも妨げられます。:password_digestこれは大したことではありませんが、まだ理想的ではありません。

より良いオプションは、デフォルトのメソッドをオーバーライドすることだと思います.should_confirm_password?

# If password_confirmation is passed, business as usual.
# If not, don't run the validations
def should_confirm_password?
    password_confirmation.present? || false
end
于 2013-11-01T18:13:01.883 に答える