我正在使用 Devise for Rails。在默认注册过程中,Devise 要求用户输入密码两次以进行验证和身份验证。我怎样才能禁用它?
[`我已经从堆栈溢出中删除了所有答案,因为我不想为提取性、剥削性、“人工智能”服务的培训做出贡献。抱歉。]
顺便说一句,我同意这种做法,在极少数情况下出现拼写错误,用户可以简单地使用密码恢复来恢复他们的密码。
model.password_confirmation = model.password
model.save
: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
从
中删除:可验证
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:confirmable, :timeoutable, :validatable
;)
lib/devise/models/validatable.rb):
validates_confirmation_of :password, :if => :password_required?
及方法:
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
我们需要覆盖设计默认的密码验证。 将以下代码放在最后,以免它被任何 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 字段。
https://github.com/plataformatec/devise/wiki/Disable-password-confirmation-during-registration
一些用户希望注册过程更短、更容易。 可以删除的字段之一是密码确认。最简单的解决方案是:您可以简单地删除password_confirmation 注册表中的字段位于 devise/registrations/new.html.erb(如果您使用的是 new.html.haml HAML),完全不需要确认密码!
其原因在于 lib/devise/models/validatable.rb 中 设计来源:
请注意,只有在需要密码时才会触发验证? 返回true,并且password_required?将返回 false 如果 password_confirmation 字段为零。
因为表单中存在password_confirmation字段, 它将始终作为空字符串包含在参数 hash 中 如果留空,则触发验证。但是,如果您 删除表单中的输入、password_confirmation params 将为 nil,因此验证不会 触发了。