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

use*_*713 7 facebook ruby-on-rails omniauth

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

期望:

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

实际结果:

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

Facebook应用程序设置

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

Facebook登录网站网址:http:// localhost:3000/

画布URL:http:// localhost:3000/auth/facebook /

omn​​iauth.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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Nir*_*hah 1

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

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