ruby-on-rails - Omniauth-facebook 的 Facebook Canvas 身份验证重定向问题(在 iframe 外部重定向)

标签 ruby-on-rails facebook omniauth

我是 Facebook 身份验证方面的新手,一直困扰着重定向问题。我使用 Rails 3.2.6 实现了我的应用程序,并使用 omniauth-facebook 1.4.0 与 Facebook 集成。我网站上的“使用 Facebook 登录”可以正常工作,但是 Canvas 身份验证无法按预期工作。

期望:

  1. 用户在 Facebook 上找到我的网络应用程序并接受登录对话框以启动我的应用程序。
  2. 用户被重定向到 Facebook Canvas 页面上的我的应用程序,而不是在 facebook Canvas iframe 之外。

实际结果:

用户身份验证有效,但随后我的应用页面被重定向到 iframe 之外。

Facebook 应用程序设置

Facebook 应用程序设置如下。 Canvas URL 设置为“/auth/facebook/”以立即对用户进行身份验证。 (我添加了空间以避免喜欢无效的域)

Website with Facebook Login Site URL: http: //localhost:3000/

Canvas URL: http: //localhost:3000/auth/facebook/

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, FB_APP_ID, FB_APP_SECRET, {:image_size => 'large', :iframe => true, :client_options => {:ssl => {:ca_file => Rails.root.join('lib/assets/cacert.pem').to_s}}}
end

session Controller .rb

class SessionsController < ApplicationController   def create
    auth = Auth.from_omniauth(env["omniauth.auth"])
    session[:user_id] = auth.id
    redirect_to root_url   end

  def destroy
    session[:user_id] = nil
    redirect_to root_url   end end

提前致谢!

最佳答案

解决此问题的简单方法是检测用户是否在框架内,如果不在框架内,则将其跳转到 Facebook。我在我的 Facebook 应用程序中使用以下 JavaScript 执行此操作:

<script type="text/javascript">
if ( top === self ) {
    window.top.location = '{fb_canvas_url}';
}
</script>

关于ruby-on-rails - Omniauth-facebook 的 Facebook Canvas 身份验证重定向问题(在 iframe 外部重定向),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158827/

相关文章:

ruby-on-rails - 如何将 Rails 项目从 Rail 3.0.5 升级到 3.0.6?

ruby-on-rails - Rails acts_as_taggable - 通过关系进行 tagged_with

ios - 尚未安装 iOS 应用程序时的 Facebook 深度链接

php - Facebook php-sdk v4 获取好友列表

facebook - Omniauth Facebook 错误 - Faraday::Error::ConnectionFailed

ruby-on-rails - rails5 api + devise_token_auth : no access-token and uid returns after login successfully via omniauth2

ruby-on-rails - 安全地显示使用回形针 gem 上传的图像

css - 生产环境 rails 中的字体问题

c# - HttpWebRequest UserAgent setter - 此属性未由此类实现

ruby-on-rails-3 - 事件模型 MassAssignmentSecurity 错误