Ruby on rails 使用Desive处理Facebook和Google OmniAuth的正确方法是什么?

Ruby on rails 使用Desive处理Facebook和Google OmniAuth的正确方法是什么?,ruby-on-rails,devise,omniauth,Ruby On Rails,Devise,Omniauth,我正在我的Rails应用程序中进行跟踪。它与Facebook配合得很好,现在我加入了谷歌。在我的本地环境中,一切似乎都很好,但当我上传到生产环境时,我遇到了一些关于cookie大小限制的问题 最初,user.rb模型文件包含: def self.new_with_session(params, session) super.tap do |user| elsif data = session["devise.facebook_data"] &&

我正在我的Rails应用程序中进行跟踪。它与Facebook配合得很好,现在我加入了谷歌。在我的本地环境中,一切似乎都很好,但当我上传到生产环境时,我遇到了一些关于cookie大小限制的问题

最初,user.rb模型文件包含:

  def self.new_with_session(params, session)
    super.tap do |user|
      elsif data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end
我已更新该方法,如下所示:

  def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.google_data"]
        user.email = data["email"] if user.email.blank?
      elsif data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end
cookie大小问题是由GoogleOmniauth数据具有非常大的“额外”属性引起的。为了解决这个问题,我删除了omniauth_callbacks_controller.rb中的“额外”块:

  def google_oauth2
    @user = User.from_omniauth(request.env["omniauth.auth"].delete_if{|key, value| key == "extra"})
    if @user.persisted?
      sign_in_and_redirect @user, :event => :authentication
      set_flash_message(:notice, :success, :kind => "Google") if is_navigational_format?
    else
      session["devise.google_data"] = request.env["omniauth.auth"].delete_if{|key, value| key == "extra"}
      redirect_to new_user_registration_url
    end
  end
这是可行的,但我担心它很脆弱,因为当我第一次上传到生产时,它陷入了一个糟糕的状态,我的客户无法访问注册屏幕

在新的\u with_session()方法中,是否有更好的方法组合两种类型的提供程序