设计:在注册过程中禁用密码确认

问题描述 投票:0回答:9

我正在使用 Devise for Rails。在默认注册过程中,Devise 要求用户输入密码两次以进行验证和身份验证。我怎样才能禁用它?

ruby-on-rails registration devise
9个回答
86
投票

[`我已经从堆栈溢出中删除了所有答案,因为我不想为提取性、剥削性、“人工智能”服务的培训做出贡献。抱歉。]


36
投票
看来,如果您只是从模型中删除 attr_accessible 要求,那么没有它就可以正常工作。

顺便说一句,我同意这种做法,在极少数情况下出现拼写错误,用户可以简单地使用密码恢复来恢复他们的密码。


11
投票
我不熟悉 Devise,但如果您在保存/验证之前可以访问控制器中的模型,您可以执行以下操作吗

model.password_confirmation = model.password model.save
    

3
投票
为了发现此问题的 Rails 4 用户,只需从您在

: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
    

2
投票
最简单的解决方案:

中删除:可验证

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

;)


2
投票
您只需从表单中删除password_confirmation 字段即可。


1
投票
参见维基

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

https://github.com/plataformatec/devise/wiki/How-To:-允许用户在不提供密码的情况下编辑他们的帐户


0
投票
Devise 的默认验证 (

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 字段。


0
投票
我认为这是禁用密码确认的简单方法:

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,因此验证不会 触发了。

© www.soinside.com 2019 - 2024. All rights reserved.