0

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

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

  1. 检查用户是否有 facebook 会话
  2. 如果用户已登录 facebook 并已获得许可,则应将他重定向到我的应用程序上的个人资料页面
  3. 如果没有会话,或者如果用户登录到 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 刷新原始登录页面。

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 回答