2010-09-22 11 views
8

Jestem nowy w logice OpenID. Używam składnik OpenID dla CakePHP przez Cakebaker, z biblioteki PHP OpenID przez JanRain.Czy istnieje lepszy sposób na pobranie informacji o identyfikatorze OpenID od dostawcy?

To wszystko działa całkiem dobrze, ale nie mogłem znaleźć wyczerpującego sposobu na odzyskanie informacji użytkownika w zależności od dostawcy i metody (sreg vs. ax). Oto, co wymyśliłem:

if ($axResponse) { 
    if (is_array($a = $axResponse->get('http://axschema.org/contact/email'))) { 
     $user_record['email'] = $a[0]; 
     if (is_array($b = $axResponse->get('http://axschema.org/namePerson'))) { 
      $user_record['nickname'] = $b[0]; 
     } 
    } else if (is_array($a = $axResponse->get('http://schema.openid.net/contact/email'))) { 
     $user_record['email'] = $a[0]; 
     if (is_array($b = $axResponse->get('http://schema.openid.net/namePerson'))) { 
      $user_record['nickname'] = $b[0]; 
     } 
    } 
} else if ($sreg) { 
    if (isset($sreg['email'])) { 
     $user_record['email'] = $sreg['email']; 
    } 
    if (isset($sreg['nickname'])) { 
     $user_record['nickname'] = $sreg['nickname']; 
    } 
} 

Mimo że przetestowałem to z powodzeniem w Google, Yahoo! i OpenID AOL, jestem pewien, że wpadłbym w kłopoty z innymi/mniejszymi dostawcami. Czy istnieje lepszy i lepszy sposób na osiągnięcie tego samego rezultatu? Wydaje się to szczególnie wadliwe, gdy próbuję pobrać inne opcjonalne pola ...

Odpowiedz

2

PamiÄ Pamiętaj, że OpenID to standard uwierzytelniania użytkowników, a nie autori zacji dostępu do danych. Oczywiście można uzyskać pewne informacje o użytkowniku za pomocą OpenID, ale nie jest to główny cel protokołu. OAuth to standard autoryzacji i możesz zacząć od tego, jeśli pobieranie danych użytkownika jest tym, czego potrzebujesz.

+0

Całkowicie się z tobą zgadzam, o ile zamknę to pytanie i zaakceptuję twoją odpowiedź. Na szczęście od tego czasu sytuacja znacznie się rozwinęła, a OAuth2 uzyskał wsparcie, a obecnie korzystam z niego tylko i będę korzystać z OpenID w większości przypadków. –

0

Przykro mi ... nie wiem zbyt wiele na temat "komponentu OpenID dla CakePHP", ale pracowałem z lightopenid i to jest również opensource ..

to sprawdzić: http://code.google.com/p/lightopenid/updates/list

ja pracowałem z tym wiele razy .. i to jest dobre .. mam nadzieję, że to pomaga ...

+0

Niestety to mi nie pomaga, ponieważ wszystko działa dobrze. Bardziej poszukuję eleganckiego sposobu radzenia sobie z odpowiedzią, której nie obejmuje ta biblioteka i jej dokumentacja ... –

+0

Nie ma problemu, Daniem, To był tylko pomysł, dzięki za informację zwrotną ... –

+0

Teoretycznie wystarczy skopiować funkcje 'get * Attributes()' z LightOpenID, zastępując '$ this-> data' ->' $ _GET + $ _POST'. – Mewp

Powiązane problemy