我正在使用 Facebook PHP 与 CodeIgniter 的集成。我有一个问题,我点击登录链接,它把我带到 Facebook 登录,我成功登录,当它重定向回我的页面时,没有任何 Facebook 信息通过。然后,如果我再次单击登录链接,它会立即让我登录,而无需 Facebook 登录表单。如果我要刷新页面而不是第二次单击登录链接,Facebook 信息仍然不会显示。
我觉得这与会话有关。
$facebook = $this->facebook;
$user = $facebook->getUser();
$user始终为 0,直到我第二次单击登录链接。这是登录流程:
我觉得它在GET /oath/authorize阶段失败了。
public function fb_login() {
$facebook = $this->facebook;
// Get User ID
$user = $facebook->getUser();
$this->session->set_userdata(array('user' => $user));
var_dump($user);
$profile = null;
$logoutUrl = null;
$loginUrl = null;
try {
$profile = $facebook->api('/me');
$this->session->set_userdata(array('profile' => $profile));
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
if ($user) {
$url = $this->uri->uri_string();
$url = str_replace('/', '-', $url);
$logoutUrl = $facebook->getLogoutUrl(array(
'next' => site_url('[omitted]/fb_logout'.'/'.$url)));
$this->session->set_userdata(array('logoutUrl' => $logoutUrl));
} else {
$loginUrl = $facebook->getLoginUrl(array('display' => 'touch'));
$this->session->set_userdata(array('loginUrl' => $loginUrl));
}
$facebook_array = array(
'user' => $user,
'profile' => $profile,
'logoutUrl' => $logoutUrl,
'loginUrl' => $loginUrl
);
return $facebook_array;
}
public function view_events($organiser_type) {
$this->load->helper('form');
$organiser_type = urldecode($organiser_type);
$data['organiser_type'] = $organiser_type;
$data['title'] = $organiser_type.' Events';
$data['events'] = $this->trinity_impulse_model->get_events_by_type(
$organiser_type,
array('event_start_date', 'event_start_time'),
array('asc', 'asc'));
$i = 0;
foreach ($data['events'] as $event) {
$data['events'][$i]['event_start_date'] = format_timestamp_to('dateFromDB', $event['event_start_date']);
$data['events'][$i]['event_end_date'] = format_timestamp_to('dateFromDB', $event['event_end_date']);
$data['events'][$i]['event_start_date'] = humanise_date($data['events'][$i]['event_start_date']);
$data['events'][$i]['event_end_date'] = humanise_date($data['events'][$i]['event_end_date']);
$data['events'][$i]['event_start_time'] = format_timestamp_to('shorttime', $event['event_start_time']);
$data['events'][$i++]['event_end_time'] = format_timestamp_to('shorttime', $event['event_end_time']);
}
$facebook_array = $this->fb_login();
var_dump($this->session->userdata('user'));
// Get session values.
/*$data['user'] = $this->session->userdata('user');
$data['profile'] = $this->session->userdata('profile');
$data['loginUrl'] = $this->session->userdata('loginUrl');
$data['logoutUrl'] = $this->session->userdata('logoutUrl');
*/
$data['user'] = $facebook_array['user'];
$data['profile'] = $facebook_array['profile'];
$data['loginUrl'] = $facebook_array['loginUrl'];
$data['logoutUrl'] = $facebook_array['logoutUrl'];
$this->load->view('[omitted]/view_events', $data);
}
编辑:我的应用程序中的其他页面正常工作。登录会在第一次尝试时显示 Facebook 数据。其他页面没有什么不同。它们都以相同的方式使用fb_login()函数。
EDIT2:我做了var_dump($facebook)来查看登录失败时变量的不同之处。遇到问题时发现状态已设置。如果未设置,则登录没有问题。我仍然不知道如何解决这个问题。这是var_dump():
["state":protected]=> string(32) "ac816d6fa8fba908b6bd01f3e7f0ec75"