无法在Mongoid中创建身份验证

时间:2015-04-10 14:17:30

标签: ruby-on-rails mongoid

所以我厌倦了这个,因为出于某种原因,这个bug似乎已经存在了这么多个月,它显然不会困扰很多人。我无法理解为什么,因为我永远无法创建基本的用户身份验证系统。

我得到的错误是:

@selector={"_id"=>{"$oid"=>BSON::ObjectId('5527d409536962695c000000')}}
Can't canonicalize query: BadValue unknown operator: $oid

这是因为我尝试创建一个名为current_user的辅助方法。我使用以下代码:

private
def current_user
 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

如何解决这个疯狂烦人的错误?

1 个答案:

答案 0 :(得分:1)

这是由ObjectId的JSON表示引起的。这是我的团队和我一直在使用的解决方案。

将此添加到Concer / zero_oid_fix.rb

module ZeroOidFix
  extend ActiveSupport::Concern

  module ClassMethods
    def serialize_from_session(key, salt)
      record = to_adapter.get((key[0]["$oid"] rescue nil))
      record if record && record.authenticatable_salt == salt
    end
  end
end

然后在User.rb中添加

   include ZeroOidFix

确保该线位于设计线下方(如果您正在使用它)。