将Facebook登录php sdk与Codeigniter集成

时间:2015-01-17 08:44:40

标签: php codeigniter facebook-php-sdk facebook-login

我是Codeigniter的新手,我正在尝试在我的codeigniter项目中将登录与facebook app集成。我在localhost中运行它。

我面临的问题是:

  1. 虽然我已将Cookie设置为true,但登录凭据并未存储在Cookie中。

    $this->load->library("facebook", array("appId" => "xxx", "secret" => "xxx", "cookie" => true));

  2. 每次加载页面时,都会检查facebook凭据并创建/更新我使用setcookie函数创建的cookie。我只想在用户登录/注销时发生这种情况。

  3. 我想在这里明确设置会话和cookie,因为除了facebook登录之外我还允许基本登录。

  4. 当我将电子邮件传递给流程函数时,cookie值与实际电子邮件的值不同。例如。如果我的Facebook电子邮件是abcd@gmail.com,则将Cookie值设置为abcd%40gmail.com

  5. 这是我的代码:

    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中,而不是在我重新加载页面时不想创建/更新它。而不是我宁愿检查存在,然后采取行动。

0 个答案:

没有答案