Facebook使用Codeigniter登录?

时间:2017-04-06 07:06:06

标签: php codeigniter

这是我的控制器,它运作正常。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {


    public function __construct(){
        parent::__construct();
        $this->load->library('session');
    }

    function index(){
        $this->load->view("welcome_message");
    }

    function fblogin(){

    $fb = new Facebook\Facebook([
          'app_id' => '213234637467346734',
          'app_secret' => '7346762476374673647',
          'default_graph_version' => 'v2.8',
        ]);

   $helper = $fb->getRedirectLoginHelper();

   $permissions = ['email','user_location','user_birthday','publish_actions']; 
// For more permissions like user location etc you need to send your application for review

   $loginUrl = $helper->getLoginUrl('http://localhost/facebooklogin/welcome/fbcallback', $permissions);

   header("location: ".$loginUrl);

}
function fbcallback(){

        $fb = new Facebook\Facebook([
        'app_id' => '1767865763452676',
        'app_secret' => '2454f5b88ea788b407297f39400b796b',
        'default_graph_version' => 'v2.5',
        ]);

        $helper = $fb->getRedirectLoginHelper(); 
        $this->session->set_userdata('state',$_GET['state']); 

        try {  

            $accessToken = $helper->getAccessToken();  

        }catch(Facebook\Exceptions\FacebookResponseException $e) {  
          // When Graph returns an error  
          echo 'Graph returned an error: ' . $e->getMessage();  
          exit;  
        } catch(Facebook\Exceptions\FacebookSDKException $e) {  
          // When validation fails or other local issues  
          echo 'Facebook SDK returned an error: ' . $e->getMessage();  
          exit;  
        }  


        try {
          // Get the Facebook\GraphNodes\GraphUser object for the current user.
          // If you provided a 'default_access_token', the '{access-token}' is optional.
          $response = $fb->get('/me?fields=id,name,email,first_name,last_name,birthday,location,gender', $accessToken);
         // print_r($response);
        } catch(Facebook\Exceptions\FacebookResponseException $e) {
          // When Graph returns an error
          echo 'ERROR: Graph ' . $e->getMessage();
          exit;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
          // When validation fails or other local issues
          echo 'ERROR: validation fails ' . $e->getMessage();
          exit;
        }

        // User Information Retrieval begins................................................
        $data['me'] = $response->getGraphUser();
        $data['accessToken'] =$accessToken;

        $this->load->view("home",$data);


    }


}

当我刷新主页时,它会给我这个错误 Facebook SDK返回错误:跨站点请求伪造验证失败。必需的参数&#34;州&#34;持久数据中缺少。 出于安全原因,我在这里更改了app_id和app_secret。我还在自动加载文件中加载会话库

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。我只是在try块中添加此代码,然后获取访问令牌

if(!$this->session->userdata('token')){
             $accessToken = $helper->getAccessToken(); 
             $this->session->set_userdata('token',$accessToken);
           } 
           else{
            $accessToken = $this->session->userdata('token');
           }