【问题标题】:Facebook Canvas Authentication Redirect Issue with Omniauth-facebook (redirect outside iframe)Omniauth-facebook 的 Facebook Canvas 身份验证重定向问题(重定向到 iframe 外部)
【发布时间】:2012-12-18 23:47:06
【问题描述】:

我是关于 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/

画布网址: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

提前致谢!

【问题讨论】:

  • 出于安全原因,您不能将 facebook 中的内部 iframe 应用程序重定向到 facebook auth 端点。因此,您需要将 location.top 设置为 auth 端点,然后重定向回 canvas 应用程序,该应用程序将包含一个签名请求。

标签: ruby-on-rails facebook omniauth


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多