Я использую библиотеку OpenID PHP от JanRain. Он поставляется с примером скрипта, который использует расширение SReg. Но я хочу, чтобы он работал с Google (и он работает на самом деле на самом деле), но Google использует AX (обмен атрибутами) вместо SReg для получения дополнительных данных. По какой-то причине библиотека JanRain пропускает поддержку AX в сценарии примера, а комментарии к коду в сценарии AX из моего понимания, хотя комментарии в сценарии SReg понятны как 1-2-3.
Кто-нибудь знает, как реализовать AX без лишней боли?
Иди в эту же проблему. Некоторые копания в AX.php заставили меня начать работу. Не искал никаких ошибок, не тестировался и не тестировался ни с кем, кроме Google. Это не очень хорошо: требуется обработка ошибок и т. Д. Но это должно помочь вам начать. Опубликует обновление, если у меня есть что-то надежное …
Сначала бросить …
// oid_request.php // Just tested this with/for Google, needs trying with others ... $oid_identifier = 'https://www.google.com/accounts/o8/id'; // Includes required files require_once "Auth/OpenID/Consumer.php"; require_once "Auth/OpenID/FileStore.php"; require_once "Auth/OpenID/AX.php"; // Starts session (needed for YADIS) session_start(); // Create file storage area for OpenID data $store = new Auth_OpenID_FileStore('./oid_store'); // Create OpenID consumer $consumer = new Auth_OpenID_Consumer($store); // Create an authentication request to the OpenID provider $auth = $consumer->begin($oid_identifier); // Create attribute request object // See http://code.google.com/apis/accounts/docs/OpenID.html#Parameters for parameters // Usage: make($type_uri, $count=1, $required=false, $alias=null) $attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/contact/email',2,1, 'email'); $attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/first',1,1, 'firstname'); $attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/last',1,1, 'lastname'); // Create AX fetch request $ax = new Auth_OpenID_AX_FetchRequest; // Add attributes to AX fetch request foreach($attribute as $attr){ $ax->add($attr); } // Add AX fetch request to authentication request $auth->addExtension($ax); // Redirect to OpenID provider for authentication $url = $auth->redirectURL('http://localhost:4001', 'http://localhost:4001/oid_catch.php'); header('Location: ' . $url);
… и затем поймать
<?php // oid_catch.php // Includes required files require_once "Auth/OpenID/Consumer.php"; require_once "Auth/OpenID/FileStore.php"; require_once "Auth/OpenID/AX.php"; // Starts session (needed for YADIS) session_start(); // Create file storage area for OpenID data $store = new Auth_OpenID_FileStore('./oid_store'); // Create OpenID consumer $consumer = new Auth_OpenID_Consumer($store); // Create an authentication request to the OpenID provider $auth = $consumer->complete('http://localhost:4001/oid_catch.php'); if ($response->status == Auth_OpenID_SUCCESS) { // Get registration informations $ax = new Auth_OpenID_AX_FetchResponse(); $obj = $ax->fromSuccessResponse($response); // Print me raw echo '<pre>'; print_r($obj->data); echo '</pre>'; exit; } else { // Failed }
Это должны быть основы …
Половина запроса работает, однако я получаю отказ в Catch.
Если линия выше
$auth = $consumer->complete('http://localhost:4001/oid_catch.php');
быть
$response = $consumer->complete('http://localhost:4001/oid_catch.php');
В противном случае, откуда возникает объект ответа? Я не возвращаю openid.current_url в своем ответе, чтобы проверить URL-адрес?