Domanda

Ho accarezzato il PHP Biblioteca Janrain OpenID, per lo più in seguito insieme a un tutorial che ho trovato su ZendZone .

Come si fa a distinguere tra gli utenti - in particolare gli utenti di Google, che hanno tutti finiscono per utilizzando lo stesso URL OpenID, https://www.google.com/accounts/o8/id ?

In sostanza, io sono al punto in cui posso rilevare che essi hanno un account OpenID ... che hanno autenticato con successo ... ma la mia applicazione ancora non sa chi sono; solo che autenticati.

Per distinguere gli utenti, il tutorial utilizza una "richiesta di semplice registrazione" per richiedere di posta elettronica dell'utente del provider OpenID -. E quindi utilizzare l'indirizzo e-mail per vedere se questo è un utente di ritorno

Non stava lavorando per me e a quanto pare non funziona con alcuni provider così mi è stato eccitato quando sono incappato in una funzione getDisplayIdentifier.

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

Purtroppo, dopo un paio d'ore, il valore restituito da cambiamenti getDisplayIdentifier.

È stato utile?

Soluzione 2

Il problema era che OpenIDs di Google sono unici al-Dominio ; Ero stato assente alternata distrattamente tra http://www.mysite.com e http://mysite.com, che ha causato l'url OpenID identità per il cambiamento!

Altri suggerimenti

Scorrendo il codice, penso che sia $oid_response->identity_url che si desidera. Per me (anche se in DotNetOpenAuth non php-OpenID), che ritorna come

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

da parte di Google, dove la parte ID è riproducibile e, auspicabilmente, unico per me. Comunque non ho lasciato un paio d'ore per vedere se questo cambia, quindi mi scuso se questo è ciò che hai già avuto da getDisplayIdentifier - ma scrematura la fonte sembra che sarebbe basta usare la prima parte, ma poi non ho sono PHP esperto.

Perché non è sufficiente utilizzare l'URL OpenID per identificare gli utenti? Consideratelo unico come un indirizzo email.

Secondo l'ultimo paragrafo di seguito, si dovrebbe assolutamente utilizzare l'attributo identity_url dell'oggetto risposta (concesso, questo è in riferimento alla libreria Python, ma le implementazioni sono molto simile):

  

Il display identificatore è legato alla Identifier sostenuto, ma il   due non sono sempre uguali. L'identificatore di visualizzazione è qualcosa che il   utente deve riconoscere come quello sono entrati, mentre la risposta è   identificatore sostenuto (l'attributo L {} identity_url) può avere in più   informazioni per una migliore persistenza.

     

URL saranno spogliati dei loro frammenti per la visualizzazione. Xris volontà   visualizzare l'identificativo leggibile (i-nome) al posto del   identificatore permanente (i-numero).

     

Utilizzare l'identificatore di visualizzazione nell'interfaccia utente. Uso   L {} identity_url per interrogare il server di database o l'autorizzazione.

Dalla documentazione python-OpenID .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top