【问题标题】:Facebook canvas Iframe App authentication problemFacebook canvas Iframe App 身份验证问题
【发布时间】:2012-02-07 21:40:12
【问题描述】:
  1. 我正在将 facebook 应用从 fbml 转换为 iframe。

现在我正在使用几个 iframe 页面进行测试。

$user = $facebook->require_login();

它让当前用户登录。一旦它从 facebook.com 获取变量,它就会通过 facebook 提供的 PHP API 保存在 cookie 中)。 我使用 Facebook 的另一个选项卡注销,并尝试使用我的应用程序而不刷新整个网站(仅使用我的应用程序内的链接)。它仍然给出$user 变量。

表示用户已经登录,而不是用户退出。

请帮帮我。我希望我的应用安全。

  1. 当我们选择“在新窗口中打开这个框架”时,它看起来我的 iframe 应用程序可以访问。 我也需要一个解决方案。

提前致谢。

【问题讨论】:

    标签: facebook


    【解决方案1】:

    只要您登录 facebook,您就已登录。您必须创建自定义 PHP 的会话处理。但是,如果您想从应用程序的 cookie 中删除用户,您可以这样做:

    //this will clear cookies for your application and redirect them to a login prompt
    $facebook->set_user(null, null);
    $facebook->redirect($appcallbackurl);
    

    【讨论】:

    • 您好,感谢您的回复。我有这段代码。你能告诉我在什么条件下我需要触发这个代码。当 PHP API cookie 过期时,此代码将触发以下代码的结帐。但是我希望当用户在 facebook 中不再处于活动状态(登录)时触发此代码。试试 { if (!$facebook->api_client->users_isAppUser()) { $facebook->redirect($facebook->get_add_url()); } } catch (Exception $ex) { //这将为您的应用程序清除 cookie 并将它们重定向到登录提示 $facebook->set_user(null, null); $facebook->redirect($facebook->get_login_url($app_url, 1)); }
    【解决方案2】:

    您可以使用 JavaScript SDK 通过 FB.Event.subscribe 订阅注销事件,并在发生这种情况时重新加载页面:

    FB.Event.subscribe('auth.logout', function(response) { setTimeout('window.location.reload()', 0); });

    (在 setTimeout() 中进行包装是 Firefox 的一种解决方法。)

    为了防止用户使用“在新窗口中打开此框架”,您可以使用 if(window == window.top) 检查页面是否加载到 iframe 中,或者签名请求是否可用。如果没有,请重定向到选项卡 URL。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多