利用Facebook登录应用的方法

来源:互联网 发布:excel调用数据图表 编辑:程序博客网 时间:2024/06/04 19:32

1,在Facebook页面创建自己的应用


2,选择应用的类型


3,填写好app的名字与app的归类


4,配置及其他填写可以先暂时不填,返回应用页。如图。


5,在setting页面配置自己的app(localhost处需要填写自己服务器的地址)


6,这样Facebook页面的app配置就OK了。。从setting页面我们可以获取App ID和App Secret

APP ID:111xxxxx232*****12

App Secret:bbd4XXXXX15b04*****11c21b5b


7,Facebook进行登录

7-1:controller

<?phpclass test extends MY_Controller{    public function __construct() {        parent::__construct();        session_start();    }
    //此处为Facebook登录授权页面
    public function facebook_login(){        $config = $this->config->item('facebook');//此处为Facebook的app id和app secret,保存在配置文件中,你也可以保存到其他地方$this->load->library('fb_share_service', $config);$url = $this->fb_share_service->login_url(base_url().'fb_callback');$this->session->set_userdata('FBRLH_state', $_SESSION['FBRLH_state']);if (!empty($url)) {redirect($url);//此处在向Facebook发送请求,获取access token。}    }        //此处为Facebook回调函数页面    public function facebook_callback(){$_SESSION['FBRLH_state'] = $this->session->userdata('FBRLH_state');$config = $this->config->item('facebook');$this->load->library('fb_share_service', $config);$facebook_user_info = $this->fb_share_service->login_callback(base_url() . 'fb_callback');if (!empty($facebook_user_info)) {$token['fb_token'] = $facebook_user_info['token'];$token['fb_id'] = $facebook_user_info['user_id'];                                log_message('debug', 'fb_token:'.$token['fb_token']);                log_message('debug', 'fb_id:'.$token['fb_id']);} else {$handler_flg = FALSE;}}}
7-2:library

<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');require_once(APPPATH.'third_party/facebook/FacebookSession.php');require_once(APPPATH.'third_party/facebook/FacebookRequest.php');require_once(APPPATH.'third_party/facebook/GraphUser.php');require_once(APPPATH.'third_party/facebook/FacebookRequestException.php');require_once(APPPATH.'third_party/facebook/FacebookRedirectLoginHelper.php');class fb_share_service{    private $app_id;    private $app_secret;    public function fb_share_service($config)    {        $this->app_id = $config['appId'];        $this->app_secret = $config['secret'];        log_message('debug', 'Facebook_config_appId:'.$config['appId']);        log_message('debug', 'Facebook_share_appId:'.$this->app_id);        log_message('debug', 'Facebook_config_secret:'.$config['secret']);        log_message('debug', 'Facebook_share_secret:'.$this->app_secret);        FacebookSession::setDefaultApplication($this->app_id, $this->app_secret);    }        /**    * create login url for facebook    * @param string $callback_url 此处的callback url是在服务器自定义的回调函数    */   public function login_url($callback_url)   {           $helper = new FacebookRedirectLoginHelper($callback_url, $apiVersion = NULL);           return $helper->getLoginUrl(array('publish_actions'));   }      /**    * get access_token from callback    * @param string $callback_url    */   public function login_callback($callback_url)   {           $helper = new FacebookRedirectLoginHelper($callback_url);           try {                   $session = $helper->getSessionFromRedirect();                   if (!empty($session)) {                           $token = $session->getToken();                           if (!empty($token)) {                                   $appsecret_proof= hash_hmac('sha256', $token, $this->app_secret);                                   $request = new FacebookRequest(                                           $session,                                           'GET',                                           '/me/permissions',                                           array('appsecret_proof' => $appsecret_proof)                                   );                                   $response = $request->execute();                                   $response_data = $response->getResponse()->data;                                                                      if (is_array($response_data)) {                                           foreach ($response_data as $key => $value) {                                                   $permission = $value->permission;                                                   if ('publish_actions' == $permission) {                                                           $user_profile = (new FacebookRequest(                                                                   $session,                                                                   'GET',                                                                   '/me',                                                                   array('appsecret_proof' => $appsecret_proof)                                                           ))->execute()->getGraphObject(GraphUser::className());                                                           $res['user_id'] = $user_profile->getId();                                                           $res['token'] = $token;                                                           return $res;                                                   }                                           }                                   }                           }                   }                   return NULL;           } catch(FacebookRequestException $ex) {                   // When Facebook returns an error                   log_message('debug', 'FacebookRequestException');                   log_message('error', $ex->getMessage());                   return NULL;           } catch(\Exception $ex) {                   log_message('debug', 'Exception');                   log_message('error', $ex->getMessage());                   // When validation fails or other local issues                   return NULL;           }   }}


这样在回调函数中我们就可以取到user_id和access_token了。


0 0