Ruby on rails 使用Desive处理Facebook和Google OmniAuth的正确方法是什么?
我正在我的Rails应用程序中进行跟踪。它与Facebook配合得很好,现在我加入了谷歌。在我的本地环境中,一切似乎都很好,但当我上传到生产环境时,我遇到了一些关于cookie大小限制的问题 最初,user.rb模型文件包含: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"] &&
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()方法中,是否有更好的方法组合两种类型的提供程序