首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何跳过has_secure_password验证

如何跳过has_secure_password验证
EN

Stack Overflow用户
提问于 2012-05-04 11:52:13
回答 4查看 7.9K关注 0票数 22

在我的应用程序中,只有管理员可以创建新的用户记录。通过电子邮件向用户发送激活链接,用户可在其中设置其密码。

我想使用has_secure_passord方法(railscast):

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_secure_password
  ...
end

效果很好,但是当管理员创建验证失败的记录时,它会自动验证密码digest...so的存在。是否有一种方法可以跳过自动添加的password_digest验证,而不跳过我添加的其他验证?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-04 22:24:50

我决定进行自己的自定义身份验证。以下解决方案将仅在设置密码时验证密码。这使管理员无需添加密码即可创建用户。

代码语言:javascript
复制
class User < ActiveRecord::Base
  include BCrypt

  attr_accessor :password, :password_confirmation

  validates :password, length: (6..32), confirmation: true, if: :setting_password?

  def password=(password)
    @password = password
    self.password_hash = Password.create(password)
  end

  def authenticate(password)
    password.present? && password_hash.present? && Password.new(password_hash) == password
  end

private

  def setting_password?
    password || password_confirmation
  end

end

如果有人发布的答案允许我仍然使用has_secure_password方法,我将改为接受它。

票数 14
EN

Stack Overflow用户

发布于 2013-05-23 13:10:03

从rails的4.X版本开始,has_secure_password采用了一个选项:验证。如果将其设置为false,则不会运行验证。

gem的3.X版本不支持此参数。但是,您可以从支持此参数的latest 4.0.XRC code向后移植activemodel/lib/active_model/secure_password.rb。

因此,您的代码将如下所示:

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_secure_password :validations => false
  ...
end
票数 31
EN

Stack Overflow用户

发布于 2012-05-04 12:07:19

没有办法跳过验证,但是编写您自己的方法版本将非常容易,它允许您传递一个参数来确定是否验证password_digest字段的存在。

只需像在SecurePassword module中一样(通过ActiveSupport::Concern)扩展ActiveModel,并添加您自己的安全密码方法。

代码语言:javascript
复制
module ActiveModel
  module MySecurePassword
    extend ActiveSupport::Concern

    module ClassMethods
      def my_has_secure_password(validate_password_digest=true)
        # you custom logic
      end
    end
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10442466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档