我是Codeigniter的新手,我正在尝试在我的codeigniter项目中将登录与facebook app集成。我在localhost中运行它。
我面临的问题是:
虽然我已将Cookie设置为true,但登录凭据并未存储在Cookie中。
$this->load->library("facebook", array("appId" => "xxx",
"secret" => "xxx", "cookie" => true));
每次加载页面时,都会检查facebook凭据并创建/更新我使用setcookie函数创建的cookie。我只想在用户登录/注销时发生这种情况。
我想在这里明确设置会话和cookie,因为除了facebook登录之外我还允许基本登录。
当我将电子邮件传递给流程函数时,cookie值与实际电子邮件的值不同。例如。如果我的Facebook电子邮件是abcd@gmail.com
,则将Cookie值设置为abcd%40gmail.com
。
这是我的代码:
class Login extends CI_Controller{
public $user = null;
public function __construct(){
parent::__construct();
parse_str($_SERVER['QUERY_STRING'],$_REQUEST);
$this->load->library("facebook", array("appId" => "xxx",
"secret" => "xxx", "cookie" => true));
$this->user = $this->facebook->getUser();
}
public function index(){
if($this->user){
try{
$user_profile = $this->facebook->api('/me');
$email = $user_profile['email'];
echo $email.'<br />';
echo $user_profile['first_name'];
echo $user_profile['last_name'];
echo '<img src="https://graph.facebook.com/'.$this->user.'/picture?type=large">';
$this->process($email);
}catch(FacebookApiException $e){
print_r($e);
$this->user = null;
}
}
if($this->user){
$logout = $this->facebook->getLogoutUrl(array(
"next" => base_url().'login/logout/'));
echo '<a href="'.$logout.'">Logout</a>';
}else{
$login = $this->facebook->getLoginUrl(array("scope" => 'email'));
echo '<a href="'.$login.'">Login</a>';
}
}
public function process($email){
$cookie = array(
'name' => 'utut',
'value' => $email,
'expire' => '86500'
);
$this->input->set_cookie($cookie);
}
public function logout(){
session_destroy();
redirect(base_url().'login');
}
}
我从某个地方获得了facebook集成代码。我不明白它在这里设置会话数据的位置,以便我可以在开始时检查它。
简而言之,我想将信息存储在cookie中,而不是在我重新加载页面时不想创建/更新它。而不是我宁愿检查存在,然后采取行动。