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 に答える