修改rails authenticate_用户函数以支持PHPs非标准bcrypt表示法

修改rails authenticate_用户函数以支持PHPs非标准bcrypt表示法,php,ruby-on-rails,ruby,laravel-5,bcrypt,Php,Ruby On Rails,Ruby,Laravel 5,Bcrypt,我有一个rails应用程序,它使用通过laravel应用程序生成和填充的用户表 我遇到的问题与另一个stackoverflow帖子有关 我需要这两个应用程序继续工作,但所有用户目前都在使用PHPs非标准符号来表示bcrypt哈希密码。转换非常容易@tadman发布了一个关于如何在ruby中使用laravel生成的密码的解决方案 BCrypt::Password.newhash.sub/\A\$2y/,“$2a” 但是现在我想弄清楚如何在rails身份验证中使用它 我一直在研究对ActiveMod

我有一个rails应用程序,它使用通过laravel应用程序生成和填充的用户表

我遇到的问题与另一个stackoverflow帖子有关

我需要这两个应用程序继续工作,但所有用户目前都在使用PHPs非标准符号来表示bcrypt哈希密码。转换非常容易@tadman发布了一个关于如何在ruby中使用laravel生成的密码的解决方案

BCrypt::Password.newhash.sub/\A\$2y/,“$2a”

但是现在我想弄清楚如何在rails身份验证中使用它

我一直在研究对ActiveModel::SecurePassword类中的authenticate_user方法进行monkeypatching,但不确定这是否是一种很好的方法

我想的另一种方法是对所有用户的加密密码进行适当的更改,使其符合标准的Bcrypt格式,但接下来我需要对laravel的用户身份验证功能进行更改。。。我必须在某个地方更改实现

有没有一种对库代码的侵入性更小的方法


谢谢

我不确定为什么我对这个问题的评价是负面的,但不管怎样,我已经找到了一种方法来完成我的要求。我修补了authenticate方法,并尝试使用文件夹结构使其尽可能清晰

我在lib/目录中创建了一个名为extensions的新目录,在那里我根据monkeypatch的相关内容组织了monkeypatch

lib/ext/rails/secure_password.rb

module ActiveModel
  module SecurePassword
    module InstanceMethodsOnActivation

      def authenticate(unencrypted_password)
        BCrypt::Password.new(password_digest.sub(/\A\$2y/, '$2a')).is_password?(unencrypted_password) && self
      end

    end
  end
end
我还在initializers目录中创建了一个ext.rb文件,该文件将加载monkeypatch类

config/initializers/ext.rb

Dir.glob(Rails.root.join('lib/ext/**/*.rb')).sort.each do |filename|
  require filename
end
如果遵循模式lib/ext/{library\u related\u to\u patch}/{name\u of\u file\u containing\u monkeypatch}.rb,这将适用于任何.rb文件