【问题标题】:Rails: has_secure_password overrideRails:has_secure_password 覆盖
【发布时间】:2012-11-13 20:28:33
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby authentication passwords


    【解决方案1】:

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

    在 Railscasts #250 中,我只需删除 password_confirmation-字段,并将用户控制器中的 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
    

    【讨论】:

    • 为此干杯,我没有看到帮助我走上正轨的拉取请求。
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2012-01-28
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2020-06-06
    • 2011-01-23
    相关资源
    最近更新 更多