【问题标题】:PHP SDK - redirect issue after asking user's permissionsPHP SDK - 询问用户权限后重定向问题
【发布时间】:2011-08-10 09:18:01
【问题描述】:

我有一个应用程序位于 Facebook 粉丝页面的标签中。

当用户访问此页面的标签时,我向他请求一些权限。

我的问题是,当用户接受权限时,他被重定向到http://apps.facebook.com/ 而不是页面的标签。

$my_url = "https://apps.facebook.com/<my_app_name>/";

如果我将 my_url 值更改为http://www.facebook.com/pages/,则用户处于无限循环中。

我的代码:

 if (isset($_REQUEST["code"])) {
  $code = $_REQUEST["code"];
 }
 if(empty($code)) {
  // Get permission from the user to manage their Page.
  $dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url)
    . "&scope=read_stream";
  echo('<script>top.location.href="' . $dialog_url . '";</script>');
 } else {
 //my code
 }

谢谢。

【问题讨论】:

    标签: facebook facebook-php-sdk


    【解决方案1】:

    这是因为 code 变量永远不会通过粉丝页面/应用程序选项卡 URL 传递到 iFrame 选项卡的内容(如果您使用应用程序选项卡 URL,则不会将其他参数传递到 iFrame URL)。因此,按照上面的代码示例,JavaScript 重定向到身份验证对话框将始终传递给客户端浏览器。

    您应该考虑使用最新的 PHP SDK (v3.1.1) 和 JavaScript SDK 来进行身份验证: http://developers.facebook.com/blog/post/534/

    来自上述博客文章的代码示例:

    require 'php-sdk/src/facebook.php';
    
    $facebook = new Facebook(array(
      'appId'  => 'YOUR_APP_ID',
      'secret' => 'YOUR_APP_SECRET',
    ));
    
    // See if there is a user from a cookie
    $user = $facebook->getUser();
    
    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
        $user = null;
      }
    }
    
    ?>
    <!DOCTYPE html>
    <html xmlns:fb="http://www.facebook.com/2008/fbml">
      <body>
        <?php if ($user_profile) { ?>
          Your user profile is 
          <pre>            
            <?php print htmlspecialchars(print_r($user_profile, true)) ?>
          </pre> 
        <?php } else { ?>
          <fb:login-button></fb:login-button>
        <?php } ?>
        <div id="fb-root"></div>
        <script>               
          window.fbAsyncInit = function() {
            FB.init({
              appId: '<?php echo $facebook->getAppID() ?>', 
              cookie: true, 
              xfbml: true,
              oauth: true
            });
            FB.Event.subscribe('auth.login', function(response) {
              window.location.reload();
            });
            FB.Event.subscribe('auth.logout', function(response) {
              window.location.reload();
            });
          };
          (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol +
              '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
          }());
        </script>
      </body>
    </html>
    

    【讨论】:

    • 我整天都在寻找这个问题,但没有用。当用户未授权应用程序时,会显示一个 fb 登录按钮,该按钮会打开一个带有错误的弹出窗口,而不是 oauth 权限对话框...查看:i.imgur.com/bVFvd.jpg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多