Вызов OpenId для получения учетных данных пользователя возвращает пустые массивы - PullRequest
0 голосов
/ 01 августа 2011

Я установил OpenId с двумя сценариями:

1) try_auth.php - initially invoked
2) finish_auth.php - meant to finish up the request

Вот сценарий try_auth.php:

<?php
// include files
  require_once "Auth/OpenID/Consumer.php";
  require_once "Auth/OpenID/FileStore.php";
  require_once "Auth/OpenID/SReg.php";

  // start session (needed for YADIS)
  session_start();

  $path = "https://www.google.com/accounts/o8/id";

  // create file storage area for OpenID data
  $store = new Auth_OpenID_FileStore('./oid_store');

  // create OpenID consumer
  $consumer = new Auth_OpenID_Consumer($store);


  // begin sign-in process
  // create an authentication request to the OpenID provider
  $auth = $consumer->begin("https://www.google.com/accounts/o8/id");
  if (!$auth) 
  {
    echo "<p>ERROR: Please enter a valid OpenID.</p>";
  }

  // create request for registration data
  $sreg = Auth_OpenID_SRegRequest::build(array('email', 'fullname', 'dob', 'language'), array('nickname'));

  if (!$sreg) 
  {
    die("ERROR: Unable to build Simple Registration request");
  }

  $auth->addExtension($sreg);  

  // redirect to OpenID provider for authentication
  $url = $auth->redirectURL('http://www.comehike.com/', 'http://www.comehike.com/auth/finish_auth.php');
  header('Location: ' . $url);  
?>

А вот сценарий finish_auth.php:

<?php

error_reporting(E_ERROR);
// include files
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
require_once "Auth/OpenID/SReg.php";


// start session
session_start();

// create store  
$store = new Auth_OpenID_FileStore('./oid_store');

// create consumer
$consumer = new Auth_OpenID_Consumer($store);

$response = $consumer->complete('http://www.comehike.com/auth/finish_auth.php');

echo $response->status;

// set session variable depending on authentication result
if ($response->status == Auth_OpenID_SUCCESS) 
{
  $_SESSION['OPENID_AUTH'] = true;

  // get registration information
  $sreg = new Auth_OpenID_SRegResponse();
  $obj = $sreg->fromSuccessResponse($response);

  echo '<p>Obj:</p>';

  $data = $obj->contents(); 
var_dump($data);
    echo '<p>Data:</p>';  
  var_dump($data);

  if (isset($data['email'])) 
  {
    error_log("..................email: ".$data['email']);
  }  
}

// redirect to restricted application page
//header('Location: restricted.php');  
?>

Я использую это руководство для настройки: http://devzone.zend.com/article/3581

И в основном все работает, кроме того, что страница не перенаправляется в Google для входа в систему, а массив пользовательских данных всегдапусто.

Любая помощь или предложения относительно того, что идет не так, очень ценится!

1 Ответ

2 голосов
/ 07 ноября 2011

вы должны использовать ax (сообщение об обмене атрибутами), см. Пример использования AX в PHP OpenID

и изменить

$auth = $consumer->complete('http://localhost:4001/oid_catch.php);

быть

$response = $consumer->complete('http://localhost:4001/oid_catch.php);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...