Pregunta

He estado jugando con la Biblioteca PHP JanRain OpenID, sobre todo después junto con un tutorial que encontré en ZendZone .

¿Cómo distinguir entre los usuarios - especialmente los usuarios de Google, que todos terminan usando la misma URL de OpenID, https://www.google.com/accounts/o8/id ?

Básicamente, estoy en el punto en el que puedo detectar que tienen una cuenta OpenID ... que han autenticado correctamente ... pero mi aplicación aún no sabe lo que son; solamente que se autentican.

Para distinguir a los usuarios, el tutorial usa una "solicitud de registro simple" para solicitar correo electrónico del usuario del proveedor de OpenID -. Y luego utilizar la dirección de correo electrónico para ver si esto es un usuario recurrente

No estaba funcionando para mí, y aparentemente no funcionará con algunos proveedores así que estaba emocionado cuando me encontré con un getDisplayIdentifier función.

require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
// create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('/wtv');
$consumer = new Auth_OpenID_Consumer($store);
$oid_response = $consumer->complete("http://example.com/oir_return");
if ($oid_response->status == Auth_OpenID_SUCCESS) {
    $hopefullyUniqueUserID = $oid_response->getDisplayIdentifier(); // I assumed this would be a relatively permanent way to identify the user...
                                           // I was wrong.
}

Por desgracia, después de un par de horas que el valor devuelto por cambios getDisplayIdentifier.

¿Fue útil?

Solución 2

El problema era que OpenID de Google son únicos para cada dominio ; Yo había estado ausente alterna entre mindedly http://www.mysite.com y http://mysite.com, lo que causó la url OpenID a cambio!

Otros consejos

Skimming el código, creo que es $oid_response->identity_url que desea. Para mí (aunque en DotNetOpenAuth no php-openid) que regresa como

https://www.google.com/accounts/o8/id?id=AItOawmqjknrgk6f9cNdPIVxW43GewJPa1ZW4GE

de Google, donde la parte de identificación es reproducible y es de esperar único para mí. Sin embargo no he dejado unas cuantas horas para ver si esto cambia, así que disculpas si esto es lo que ya tenía de getDisplayIdentifier - pero rozando la fuente parece que acababa de usar la primera parte, pero entonces yo no soy PHP experto.

¿Por qué no simplemente usar la URL de OpenID para identificar a los usuarios? Consideramos que es único, como una dirección de correo electrónico.

De acuerdo con el último párrafo a continuación, que sin duda debe utilizar el atributo identity_url del objeto respuesta (de acuerdo, esto es en referencia a la biblioteca de Python, pero las implementaciones son muy similar):

  

La pantalla identificador está relacionado con el identificador de reivindicada, pero el   dos no siempre son idénticos. El identificador de pantalla es algo que el   el usuario debe reconocer como lo que entraron, mientras que la respuesta es   identificador reivindicada (en el {} identity_url atributo L) puede tener adicional   información para una mejor persistencia.

     

URLs serán despojados de sus fragmentos para la visualización. voluntad Xris   visualizar el identificador legible por humanos (i-nombre) en lugar de la   identificador persistente (i-número).

     

El uso del identificador de visualización de su interfaz de usuario. Utilizar   L {} identity_url para consultar el servidor de base de datos o autorización.

A partir de los documentos pitón-openid .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top