2

Facebookの「Facebookログイン付きWebサイト」アプリ設定を利用している(現在は非常に単純な)Webサイトがあります。私の問題は一見単純に見えますが、私はそれを解決することができません、誰かが何か光を当てることができますか?

私のウェブサイトのホームページは(たとえば)https://www.mysite.net/ です。ここから以下のコードを使用してログインすると、機能します。

if(!$this->facebook->getUser())
    {
        //NOT LOGGED IN 
       $params = array(
          'scope' => 'email, publish_stream, user_photos, status_update',
          'redirect_uri' => current_url(),
        );  
        $auth_url = $this->facebook->getLoginUrl($params);  
        $auth_text = "Log In";
    } 
    else 
    {
        //LOGGED IN         
        $fbid = $this->facebook->getUser();
        $fbid = $fbid;
        $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
        $auth_text = "Log Out";
    }

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>

..それはうまくいきます。

ただし、https://www.mysite.net/second_page/から同じコードを使用し(ユーザーがログインする必要があり) 、2ページ目でも上記のコードを使用すると、ログインスクリプトはにリダイレクトされます。 Facebook Auth Dialog(素晴らしい)、redirect_uri(これも素晴らしい)にリダイレクトしますが、ユーザーはページにログインしていません。つまり、期待される「ログアウト」ダイアログではなく「ログイン」ダイアログが表示されます。

私はここで何か間違ったことをしていますか?Facebookのログインダイアログは、アプリで指定されたサイトルートのどのページからでも機能することを期待しています。ログインするたびにユーザーをホームページにリダイレクトする必要はありません。ユーザーはサイトのどのページからでもログインできる必要があります。

考え?

よろしく、ポールG

4

2 に答える 2

1

回避策を実装しました。ベースURLではないページでは、次のように、セッション変数で自分自身を参照するようにしています。

if(!$this->facebook->getUser())
{
  // Set a session var <---
  $_SESSION['redirect_state'] = current_url();
  //NOT LOGGED IN 
   $params = array(
      'scope' => 'email, publish_stream, user_photos, status_update',
      'redirect_uri' => base_url(), // <-- Changed this back to base url.
    );  
    $auth_url = $this->facebook->getLoginUrl($params);  
    $auth_text = "Log In";
} 
else 
{
    //LOGGED IN         
    $fbid = $this->facebook->getUser();
    $fbid = $fbid;
    $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
    $auth_text = "Log Out";
}

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>

次に、ログインスクリプトはアプリのベースURLにリダイレクトします。ベースURLに、$ _ SESSION ['redirect_state']の存在を確認する小さなコードを配置し、それを強制終了してからリダイレクトします。

// Is this a redirect from a another page's login?
    if((isset($_SESSION['redirect_state'])))
    {
        $redir_page = $_SESSION['redirect_state'];  
        unset($_SESSION['redirect_state']);
        redirect($redir_page);
        exit;
    }

これで、ユーザーはログイン元のページにリダイレクトされます。FBユーザーがログインしているため、リダイレクトセッション変数は設定されません。また、ユーザーがホームに戻ると、リダイレクトセッション変数が設定されていないため、ホームページが奇妙にリダイレクトされることはありません。

これが他の誰かの助けになることを願っています。この問題について話している人が他にいないことに驚いています:)

于 2012-06-21T04:11:32.080 に答える
0

配列$param(this one-> redirect_uri)からリダイレクトURLエントリを削除します。このオプションは、他のページにリダイレクトする場合にのみ使用してください。同じページにリダイレクトする場合は、言及する必要はありません。ログイン後に自動的に戻ります。

これはredirect_uriなしの同じコードです...

if(!$this->facebook->getUser())
    {
        //NOT LOGGED IN 
       $params = array(
          'scope' => 'email, publish_stream, user_photos, status_update'
         );  
        $auth_url = $this->facebook->getLoginUrl($params);  
        $auth_text = "Log In";
    } `enter code here`
    else 
    {
        //LOGGED IN         
        $fbid = $this->facebook->getUser();
        $fbid = $fbid;
        $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
        $auth_text = "Log Out";
    }

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>
于 2012-06-19T16:10:57.980 に答える