2013-08-23 2 views
1

Так у меня есть следующий сценарий:PhoneGap + Facebook + PHP бэкенд: Facebook пользователь Войти

Один PHP бэкенд, который уже использует Facebook логин для аутентификации пользователей (вместе с JS SDK)

Один PhoneGap приложение является который уже имеет плагин Facebook.

Теперь, мой вопрос: после того, как мое приложение для телефонных разговоров проходит проверку подлинности с помощью Facebook, у меня есть токен и т. Д., Но мне нужно проверить подлинность пользователя с помощью моего PHP-бэкэнд ... Каков наилучший способ сделать это, Facebook PHP SDK использует файлы cookie, а Phonegap не поддерживает их?

Есть ли способ отправить токен в PHP SDK и заставить его обрабатывать действительность маркера и действительно создать сеанс для пользователя на бэкэнд (то есть найти моего бэкэнд-пользователя, связанного с этим адресом электронной почты, отправленным мной FB и сообщить программе phonegap, что пользователь действительно аутентифицирован и может начать использовать приложение)?

ответ

1

Так что я в конечном итоге реализации класса «Facebook_Volatile», как это:

/** 
* Extends the BaseFacebook class with the intent of NOT using 
* PHP sessions to store user ids and access tokens. 
* @Author Felipe Guaycuru <[email protected]> 
*/ 
class FacebookVolatile extends BaseFacebook 
{ 
    // Stores the shared session ID if one is set. 
    //protected $sharedSessionID; 

    // Stores data non-persistently 
    private $storage = array(); 

    /** 
    * Identical to the parent constructor. 
    * 
    * @param Array $config the application configuration. 
    * @param String $access_token the supplied access token. 
    * @see BaseFacebook::__construct in facebook.php 
    */ 
    public function __construct($config, $access_token) { 
    parent::__construct($config); 
    $this->setAccessToken($access_token); 
    } 

    protected static $kSupportedKeys = 
    array('state', 'code', 'access_token', 'user_id'); 

    /** 
    * Provides the implementations of the inherited abstract 
    * methods. The implementation uses class properties to maintain 
    * a store for authorization codes, user ids, CSRF states, and 
    * access tokens. 
    */ 
    protected function setPersistentData($key, $value) { 
    if (!in_array($key, self::$kSupportedKeys)) { 
     self::errorLog('Unsupported key passed to setPersistentData.'); 
     return; 
    } 

    $this->storage[$key] = $value; 
    } 

    protected function getPersistentData($key, $default = false) { 
    if (!in_array($key, self::$kSupportedKeys)) { 
     self::errorLog('Unsupported key passed to getPersistentData.'); 
     return $default; 
    } 

    return isset($this->storage[$key]) ? 
     $this->storage[$key] : $default; 
    } 

    protected function clearPersistentData($key) { 
    if (!in_array($key, self::$kSupportedKeys)) { 
     self::errorLog('Unsupported key passed to clearPersistentData.'); 
     return; 
    } 

    unset($this->storage[$key]); 
    } 

    protected function clearAllPersistentData() { 
    foreach (self::$kSupportedKeys as $key) { 
     $this->clearPersistentData($key); 
    } 
    } 
} 

Так что в моем PHP бэкэндом я получаю $access_token и использовать его как это:

$FB = new FacebookVolatile(array(
    'appId' => CONFIG_FACEBOOK_APP_ID, 
    'secret' => CONFIG_FACEBOOK_APP_SECRET, 
), $access_token); 

Тогда я могу использовать $FB нормально, точно так же, как если бы он использовался вместе с JS SDK

Смежные вопросы