0

codeigniter アプリケーションに facebook connect を正常に統合しましたが、奇妙な不具合に遭遇しました。

ログインコントローラーのプロセスは次のとおりです。

  1. ユーザーが Facebook セッションを持っているかどうかを確認します
  2. ユーザーが Facebook にログインしていて、既に許可を与えている場合、アプリケーションのプロフィール ページにリダイレクトする必要があります。
  3. セッションがない場合、またはユーザーが facebook にログインしているが権限が与えられていない場合、ログイン フォーム (ファイルの表示) はリダイレクトなしで表示されます。

私が直面している問題は、ユーザーが facebook にログインしていて、既にアクセス許可を与えられていて、ログイン ページにアクセスすると、ログイン フォームが短時間表示され、1、2 秒後に自分のプロファイル ページにリダイレクトされることです。ログインフォームが表示されるのはなぜですか? $this->load->view('login_form');上記のすべてをチェックした後、すべてのコードがコントローラーの最後の行で実行されます。

そのため、現時点では、login_form ビュー ファイルが最初に表示され、次に facebook セッションがチェックされ、その後リダイレクトされます。

コントローラーコードを追加しました:

$this->load->library('facebook');
$user = $this->facebook->getUser();
if($user)
        {   try{
                $fb_data = $this->facebook->api('/me');
            }
            catch(FacebookApiException $e)
            {
                error_log('from the login: ' . $e);
                $user = null;        
            }
        }
if($user)
{
//below line checks if facebook email is in database
if($this->ion_auth->email_check($fb_data['email'])
{
redirect('my_profile');
}
}
//user not logged in display login page
$this->load->view('login_form');

ログインフォームでは、facebook の JavaScript 接続ボタンを使用しています。ボタンを押すとfacebookのoauthダイアログページが開き、実行後、元のログインページがjavascriptで更新されます。

4

2 に答える 2

1
$this->load->library('facebook');
$user = $this->facebook->getUser();
if($user)
        {   try{
                $fb_data = $this->facebook->api('/me');
            }
            catch(FacebookApiException $e)
            {
                error_log('from the login: ' . $e);
                $user = null;        
            }
        }
if($user)
{
//below line checks if facebook email is in database
if($this->ion_auth->email_check($fb_data['email'])
{
redirect('my_profile');
}
}else{
//user not logged in display login page
$this->load->view('login_form');
}

別の方法で指示されていないため、コードはまだ実行されています。これを試して確認してください。

于 2012-07-07T14:08:38.133 に答える
0

ログインフォームが表示されるのはなぜですか?

ブラウザにHTMLコードを出力するメソッドを実行したから…?

結局コード $this->load->view('login_form'); コントローラの最終行で実行

以前の条件により、ログインフォームを表示する必要がまったくない場合なぜそれが実行されるのですか?

于 2012-07-07T11:09:41.183 に答える