2

我已经按照 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
4

1 回答 1

1

password_confirmation显式设置为时nil,将不检查确认验证。这在Rails pull-request中被引用,它建议有一些条件值来决定是否password_confirmation需要。

在 Railscasts #250 中,我只需删除password_confirmation-field,并将create用户控制器中的 -action 更改为以下内容:

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
于 2012-11-26T11:20:37.513 回答