【问题标题】:Facebook session in an iframe application breaks ajax callsiframe 应用程序中的 Facebook 会话中断 ajax 调用
【发布时间】:2011-09-21 17:22:35
【问题描述】:

我有一个 facebook 应用程序,它通过 PHP-SDK 连接到 facebook。

    $facebook = new Facebook(array(
      'appId'  => FACEBOOK_APP_ID,
      'secret' => FACEBOOK_SECRET_KEY,
    ));

    $user = $facebook->getUser();
    if ($user) {
       try {
            $user_profile = $facebook->api('/me');
       } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
       }
     }

一切都很好,我让浏览器打开并且不响应我的应用程序。过了一会儿,我尝试通过 ajax 在应用程序中发送表单。似乎会话无效? Facebook 将再次授权我的应用程序将 ajax url 加载到浏览器地址栏中,并将新会话参数附加到该 url 并破坏应用程序。

我可以做些什么来假装 facebook “重新加载”或将 ajax/form 操作传递到浏览器地址栏?在处理每个请求之前,我都会检查用户是否仍然处于活动状态,这可能是问题所在?

   $user = $facebook->getUser();
   if ($user != 0) {
       if($this->userProfile == null){
           try {
               // Proceed knowing you have a logged in user who's authenticated.
               $this->userProfile = $facebook->api('/me');
           } catch (FacebookApiException $e) {
               error_log($e);
               $user = null;
           }
       }
   }else{
       $this->userProfile = null;
   }

   if ($this->userProfile != null) {
       $filterChain->run();
   } else {
       $loginUrl = $facebook->getLoginUrl(
       array('scope' => 'publish_stream','redirect_uri' => 'REDIRECT_URI'));
   }

   echo("<script> top.location.href='" . $loginUrl . "'</script>");

我应该使用其他方法吗? 提前致谢!

【问题讨论】:

    标签: facebook session iframe facebook-graph-api facebook-php-sdk


    【解决方案1】:

    您真的不应该以与常规页面获取相同的方式处理 ajax 调用。通常,如果在 ajax 进程中发生诸如过期会话之类的事情,您希望将错误代码发送回主页并让它在顶层处理它。

    我猜你从这个 ajax 请求发回的信息会立即被解析为 HTML?这意味着如果您发回 &lt;script&gt;top.location=xxx&lt;/script&gt; 块,它将被执行并将浏览器重定向到新位置。同样,这可能不是处理事情的最佳方式,但如果正确设置了 redirect_uri(到整个页面的 url),它仍然可以工作。因为在 ajax 页面中调用 getLoginUrl(),redirect_uri 被设置为该 url,所以在完成新授权后,浏览器被发送回(现在在顶层)。因此,虽然可能不是最佳的整体结构,但一种快速的解决方法是在 ajax 调用中覆盖 redirect_uri 设置,并使其指向父页面而不是自身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多