在脸书登录之前显示的代码点火器视图文件


Codeigniter view file displayed before facebook login

我已经成功地将Facebook connect集成到我的codeigniter应用程序中,但我遇到了一个奇怪的故障。

我的登录控制器中的流程如下:

  1. 检查用户是否有脸书会话
  2. 如果用户已登录Facebook并已授予权限,则应将他重定向到我的应用程序上的个人资料页面
  3. 如果没有会话,或者用户已登录Facebook但没有授予权限,则应显示登录表单(查看文件),而不显示
  4. 重定向

我面临的问题是,如果用户已登录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');在控制器的最后一行执行

如果以前的条件加起来根本不需要显示登录表单,为什么还要执行它?