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 ...
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. –