2010-09-03 1 views
0

Я разрабатываю гаджет с техническими требованиями: «no Cookie, no Session». У меня есть следующий код:Лучший способ использовать Zend_Oauth_Consumer без cookies и без сеанса

<?php 

class LinkedIn 
{ 

private $options; 
private $consumer; 
private $client; 
private $token; 


public function __construct($params) 
{ 
    // set Zend_Oauth_Consumer options 
    $this->options = array(
    'version' => '1.0', 
    'localUrl' => $params['localUrl'], 
    'callbackUrl' => $params['callbackUrl'], 
    'requestTokenUrl' => 'https://api.linkedin.com/uas/oauth/requestToken', 
    'userAuthorizationUrl' => 'https://api.linkedin.com/uas/oauth/authorize', 
    'accessTokenUrl' => 'https://api.linkedin.com/uas/oauth/accessToken', 
    'consumerKey' => $params['apiKey'], 
    'consumerSecret' => $params['secretKey'] 
); 

    // instanciate Zend_Oauth_Consumer class 
    require_once 'Zend/Loader.php'; 
    Zend_Loader::loadClass('Zend_Oauth_Consumer'); 
    $this->consumer = new Zend_Oauth_Consumer($this->options); 
} 


public function connect() 
{ 
    // Start Session to be able to store Request Token &amp; Access Token 
    session_start(); 

    if (!isset ($_SESSION ['ACCESS_TOKEN'])) { 
    // We do not have any Access token Yet 
    if (! empty ($_GET)) { 
// SECTION_IF 
    // But We have some parameters passed throw the URL 

    // Get the LinkedIn Access Token 
    $this->token = $this->consumer->getAccessToken ($_GET, unserialize($_SESSION ['REQUEST_TOKEN'])); 

    // Store the LinkedIn Access Token 
    $_SESSION ['ACCESS_TOKEN'] = serialize ($this->token); 
    } else { 
// SECTION_ELSE 
    // We have Nothing 

    // Start Requesting a LinkedIn Request Token 
    $this->token = $this->consumer->getRequestToken(); 

    // Store the LinkedIn Request Token 
    $_SESSION ['REQUEST_TOKEN'] = serialize ($this->token); 

    // Redirect the Web User to LinkedIn Authentication Page 
    $this->consumer->redirect(); 
    } 
    } else { 
    // We've already Got a LinkedIn Access Token 

    // Restore The LinkedIn Access Token 
    $this->token = unserialize ($_SESSION ['ACCESS_TOKEN']); 

    } 

    // Use HTTP Client with built-in OAuth request handling 
    $this->client = $this->token->getHttpClient($this->options); 

} 
} 

Это работает идеально. Но REQUEST_TOKEN хранится в СЕССИИ. Как я могу поместить его в строку запроса в SECTION_ELSE и вернуть его в SECTION_IF? Спасибо за все советы.

ответ

0

Ключевым моментом является то, что система должна:

1. persist the OAuth tokens between user requests to your server, and 
2. tie them to a specific user. 

Использование сеанса, чей идентификатор приходит либо из печенья или из строки запроса, это один из способов сделать это.

Но если сеансы отключены от таблицы, вам понадобится другой способ идентифицировать текущего пользователя и сохранить его токены OAuth.

Если вы действительно работаете в среде без сеанса, то как вы даже знаете, кто такой пользователь? Basic Auth? В отсутствие аутентификации пользователей на вашей стороне я не вижу, как вы сможете сопоставлять токены OAuth определенным пользователям.

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