0

这是我的代码:

$loginUrl = $facebook->getLoginUrl(array(
    'scope'         => 'publish_actions',
    'redirect_uri'  => 'http://mysite.com/',
    ));

它有效,但如果我删除 redirect_uri 它不再有效。

$loginUrl = $facebook->getLoginUrl(array(
    'scope'         => 'publish_actions'
    ));

根据 Facebook 文档,redirect_uri 是可选的。 https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

我试图将用户重定向到他们在登录之前使用的相同 url。

更新:当 url 为 mysite.com/post23 时会出现此问题,但当 url 为 mysite.com/staticpage 或 mysite.com 时没有问题

任何解决方法?

编辑:它看起来像一个错误,它不适用于同一站点中的某些 url

我会尝试向 Facebook 报告。

4

2 回答 2

2

如果没有给出 redirect_uri 参数,它应该重定向到当前 url。检查 base_facebook.php 中的 getLoginUrl 函数是否如下所示:

public function getLoginUrl($params=array()) {
    $this->establishCSRFTokenState();
    $currentUrl = explode("?",$this->getCurrentUrl());
    $currentUrl = $currentUrl[0];

    // if 'scope' is passed as an array, convert to comma separated list
    $scopeParams = isset($params['scope']) ? $params['scope'] : null;
    if ($scopeParams && is_array($scopeParams)) {
      $params['scope'] = implode(',', $scopeParams);
    }

    return $this->getUrl(
      'www',
      'dialog/oauth',
      array_merge(array(
                    'client_id' => $this->getAppId(),
                    'redirect_uri' => $currentUrl, // possibly overwritten
                    'state' => $this->state),
                  $params));
  }
于 2012-10-13T17:57:03.570 回答
0

我像这样解决了这个奇怪的问题:

当用户未登录时,将此行包含在文件顶部:

$_SESSION['redir_after_auth'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

然后检查用户是否正在尝试登录并且该会话已设置

if (isset($_GET['action']) AND $_GET['action']=="fblogin" && isset($_SESSION['redir_after_auth'])) {
    header('Location: ' . $_SESSION['redir_after_auth']);
}

$loginUrl = $facebook->getLoginUrl(array(
        'scope'         => 'publish_actions',
        'redirect_uri'  => 'mysite.com/?action=fblogin'
        ));
于 2012-10-15T15:34:20.023 回答