codeigniter アプリケーションに facebook connect を正常に統合しましたが、奇妙な不具合に遭遇しました。
ログインコントローラーのプロセスは次のとおりです。
- ユーザーが Facebook セッションを持っているかどうかを確認します
- ユーザーが Facebook にログインしていて、既に許可を与えている場合、アプリケーションのプロフィール ページにリダイレクトする必要があります。
- セッションがない場合、またはユーザーが 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で更新されます。