如何解决用devise处理Facebook和Google OmniAuth的正确方法是什么?
我在Rails应用中关注this approach for OmniAuth。它在Facebook上运行良好,现在我要添加Google。在我的本地环境中,一切似乎都可以正常工作,但是当我上传到生产环境时,我遇到了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大小问题是由Google OmniAuth数据具有非常大的“额外”属性引起的。要解决此问题,我删除了omniauth_callbacks_controller.rb中的“ extra”块:
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
这行得通,但是我担心它很脆弱,因为当我第一次上传到产品中时,它陷入了不良状态,并且我的客户无法访问注册屏幕。
在new_with_session()方法中是否有更好的方法来组合两种类型的提供程序?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。