2010-09-22 14 views
8

Soy nuevo en la lógica de OpenID. Estoy utilizando el componente OpenID para CakePHP de Cakebaker, con la librería PHP OpenID de JanRain.¿Hay alguna forma mejor de obtener información de OpenID del proveedor?

Todo está funcionando bastante bien, pero no pude encontrar una manera exhaustiva de recuperar la información del usuario según el proveedor y el método (sreg vs. ax). Así que esto es lo que se me ocurrió:

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']; 
    } 
} 

Aunque lo probé con éxito con Google, Yahoo! y OpenID de AOL, estoy seguro de que tendría problemas con otros/proveedores más pequeños. ¿Hay una manera mejor y más agradable de lograr el mismo resultado? Esto parece particularmente defectuoso si trato de buscar otros campos opcionales ...

Respuesta

2

le recuerda además tenga en cuenta que OpenID es un estándar para la autenticación de usuario, no para autori zación para el acceso a los datos. Naturalmente, puede obtener cierta información de usuario con OpenID, pero no es la intención principal del protocolo. OAuth es el estándar para la autorización y es posible que desee comenzar con eso, si lo que necesita es obtener datos del usuario.

+0

Estoy totalmente de acuerdo con usted, hasta el punto de cerrar esta pregunta y aceptar su respuesta. Afortunadamente, las cosas han evolucionado bastante desde entonces, con OAuth2 ganando soporte, y hoy en día, solo lo usaría, y lo haría con OpenID para la mayoría de los casos de uso. –

0

Bueno, lo siento ... no sé mucho sobre el "componente OpenID para CakePHP", pero he trabajado con lightopenid y es de código abierto también ..

mira esto: http://code.google.com/p/lightopenid/updates/list

he trabajado con esto muchas veces .. y es bueno .. espero que esto ayude ...

+0

Desafortunadamente, esto no me ayuda mucho, ya que todo funciona bien. Estoy más buscando una forma elegante de lidiar con la respuesta, que no está cubierta por esta biblioteca y su documentación tampoco ... –

+0

No hay problema, Daniem, fue una idea, gracias por los comentarios ... –

+0

Teóricamente, podría simplemente copiar las funciones 'get * Attributes()' de LightOpenID, sustituyendo '$ this-> data' ->' $ _GET + $ _POST'. – Mewp

Cuestiones relacionadas