Лучший способ использовать Zend_Oauth_Consumer без куки и без сессии - PullRequest
0 голосов
/ 04 сентября 2010

Я занимаюсь разработкой гаджета с техническими требованиями: «Нет Cookie, нет сессии».У меня есть следующий код:

<?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?Спасибо за все советы.

1 Ответ

0 голосов
/ 05 сентября 2010

Ключевым моментом является то, что вашей системе необходимо:

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

Одним из способов сделать это является использование сеанса, идентификатор которого берется из файла cookie или из строки запроса.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...