44

DeviseforRailsを使用しています。デフォルトの登録プロセスでは、Deviseは、検証と認証のためにユーザーがパスワードを2回入力することを要求します。どうすれば無効にできますか?

4

9 に答える 9

85

パスワードの確認を無効にするには、登録フォームからフィールドを削除するだけです。password_confirmationこれにより、パスワードを完全に確認する必要がなくなります。

  1. まだ行っていない場合は、デバイスビューを生成します。rails g devise:views
  2. password_confirmationのセクションを削除しますapp\views\devise\registrations\new.html.erb

これが機能する理由lib/devise/models/validatable.rbは、Deviseのソースにあります。

module Devise
  module Models
    module Validatable
 

      def self.included(base)

        base.class_eval do
          #....SNIP...
          validates_confirmation_of :password, :if => :password_required?
        end
      end
      
      #...SNIP...
      
      def password_required?
        !persisted? || !password.nil? || !password_confirmation.nil?
      end
    end
  end
end

検証は、が返さpassword_required?れた場合にのみトリガーされ、フィールドが。の場合に返されることに注意してください。truepassword_required?falsepassword_confirmationnil

フィールドがフォームに存在する場合、password_confirmationフィールドは常にパラメータハッシュに含まれるため、空白のままにすると空の文字列として検証がトリガーされます。ただし、フォームから入力を削除すると、パラメータのpassword_confirmationはになりnil、検証はトリガーされません。

于 2012-11-27T15:09:24.847 に答える
36

モデルからattr_accessible要件を削除するだけで、それがなくても問題なく機能するようです。

ちなみに、私はこの慣行に同意します。まれにタイプミスがあった場合、ユーザーはパスワード回復を使用してパスワードを回復できます。

于 2010-12-24T22:44:18.000 に答える
11

私はDeviseに精通していませんが、保存/検証の前にコントローラーのモデルにアクセスできる場合は、次のようなことを行うことができますか?

model.password_confirmation = model.password
model.save
于 2010-05-09T05:29:57.167 に答える
3

この質問を見つけたRails4ユーザーのために:password_confirmation、で宣言した許可されたパラメーターから削除するだけですApplicationController.rb

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit(:username, :email, :password)
  end
  devise_parameter_sanitizer.for(:account_update) do |u|
    u.permit(:username, :email, :password)
  end
end
于 2014-03-04T02:27:02.627 に答える
2

最も簡単な解決策:

から:validatableを削除します

devise :database_authenticatable, :registerable,
 :recoverable, :rememberable, :trackable,
 :confirmable, :timeoutable, :validatable

;)

于 2014-10-07T13:32:45.853 に答える
2

フォームからpassword_confirmationフィールドを削除するだけです。

于 2015-07-16T10:20:30.777 に答える
1

wikiを参照してください

def update_with_password(params={})
  params.delete(:current_password)
  self.update_without_password(params)
end

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-pproving-a-password

于 2011-07-18T23:06:22.130 に答える
0

Deviseのデフォルトの検証(lib / devise / models / validable.rb):

validates_confirmation_of :password, :if => :password_required?

と方法:

def password_required?
  !persisted? || !password.nil? || !password_confirmation.nil?
end

Deviseのデフォルトのパスワード検証をオーバーライドする必要があります。Devise独自の設定によって上書きされないように、最後に次のコードを配置します。

validates_confirmation_of :password, if: :revalid
def revalid
  false
end

そして、モデルは次のようになります。

class User < ActiveRecord::Base      
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable,
     :confirmable, :timeoutable, :validatable

  validates_confirmation_of :password, if: :revalid

  def revalid
    false
  end
end

次に、登録フォームからpassword_confirmationフィールドを削除します。

于 2014-09-30T21:46:04.083 に答える
0

これがパスワード確認を無効にする簡単な方法だと思います: https ://github.com/plataformatec/devise/wiki/Disable-password-confirmation-during-registration

一部のユーザーは、登録プロセスをより短く、より簡単にしたいと考えています。削除できるフィールドの1つは、パスワードの確認です。

最も簡単な解決策は次のとおりです。devise/registrations/ new.html.erb(HAMLを使用している場合はnew.html.haml)にある登録フォームからpassword_confirmationフィールドを削除するだけで、パスワードを完全に確認する必要がなくなります。

この理由は、Deviseソースのlib / devise / models/validatable.rbにあります。

password_required?の場合にのみ検証がトリガーされることに注意してください。trueを返し、password_required?password_confirmationフィールドがnilの場合、falseを返します。

password_confirmationフィールドがフォームに存在する場合、それは常にパラメーターハッシュに含まれるため、空白のままにすると空の文字列として検証がトリガーされます。ただし、フォームから入力を削除すると、paramsのpassword_confirmationはnilになるため、検証はトリガーされません。

于 2016-07-15T06:39:39.413 に答える