使用Omniauth-facebook进行Facebook Canvas身份验证重定向问题(在iframe外部重定向)

时间:2013-01-04 14:17:32

标签: ruby-on-rails facebook omniauth

我是关于Facebook身份验证的新手,并且遇到了重定向问题。我使用Rails 3.2.6实现了我的应用程序,并使用omniauth-facebook 1.4.0与Facebook集成。在我的网站上“与Facebook一起唱歌”,但是,画布认证不能按预期工作。

期望:

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

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

    Facebook应用程序设置

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

      

    使用Facebook登录站点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
    

    sessions_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
    

    提前致谢!

1 个答案:

答案 0 :(得分:1)

解决这个问题的简单方法是检测用户是否在一个框架内,如果不是,则将它们反弹到Facebook。我使用以下JavaScript在我的Facebook Apps中执行此操作:

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