我已经修改了Railscast第250集,使用has_secure_password创建用户身份验证,效果很好。但是,当我尝试更新用户配置文件时,我显然遇到了问题,因为它需要密码和密码确认。
显然没有办法覆盖这个开箱即用,所以我创建了一个名为secure_password.rb的文件,我把它放入config / initializers文件夹并复制了原有文件的内容。
我的问题是 - 有没有办法将条件传递给这个文件来说明控制器动作是否更新/编辑然后不需要密码和密码确认?
我目前的代码可以在下面找到。
def has_secure_password
gem 'bcrypt-ruby', '~> 3.0.0'
require 'bcrypt'
attr_reader :password
validates_confirmation_of :password
validates_presence_of :password_digest
include InstanceMethodsOnActivation
if respond_to?(:attributes_protected_by_default)
def self.attributes_protected_by_default
super + ['password_digest']
end
end
end
答案 0 :(得分:1)
当password_confirmation
明确设置为nil
时,将不会检查确认验证。这是在Rails pull-request中提到的,它建议有一些条件值来决定是否需要password_confirmation
。
在Railscasts#250中,我只需删除password_confirmation
- 字段,并将用户控制器中的create
- 操作更改为以下内容:
def create
@user = User.new(params[:user])
@user.password_confirmation = nil # Disables confirmation check
if @user.save
redirect_to root_url, :notice => "Signed up!"
else
render "new"
end
end