我已经成功地将Facebook connect集成到我的codeigniter应用程序中,但我遇到了一个奇怪的故障。
我的登录控制器中的流程如下:
- 检查用户是否有脸书会话
- 如果用户已登录Facebook并已授予权限,则应将他重定向到我的应用程序上的个人资料页面
- 如果没有会话,或者用户已登录Facebook但没有授予权限,则应显示登录表单(查看文件),而不显示 重定向
我面临的问题是,如果用户已登录Facebook并已获得权限,并且如果他访问登录页面,则登录表单会短暂显示,然后在一两秒钟后,他被重定向到他的个人资料页面。为什么甚至显示登录表单?在所有代码之后,$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 刷新。
$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');
}
代码仍在执行,因为没有告诉它,否则,试试这个看看。
为什么甚至显示登录表单?
因为您执行了一个将 HTML 代码发布到浏览器的方法......?
在所有代码之后$this->load->view('login_form');在控制器的最后一行执行
如果以前的条件加起来根本不需要显示登录表单,为什么还要执行它?