Rails:has_secure_password覆盖

时间:2012-11-26 11:05:59

标签: ruby-on-rails ruby authentication passwords

我已经修改了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

1 个答案:

答案 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