Après que votre gestionnaire onlogin
a été appelé avec une assertion, si pour quelque raison, vous ne pouvez utiliser cette assertion pour connecter l'utilisateur, vous devez appeler navigator.id.logout()
.
Si vous ne le faîtes pas, la prochaine que vous appelerez navigator.id.watch()
, Persona appelera immédiatement, à nouveau, votre gestionnaire onlogin
, avec la même assertion. Ceci amène généralement à une boucle infinie d'echec de connexion :
- L'utilisateur clique sur "Se connecter"
- L'utilisateur intéragit avec l'interface de Persona, et Persona génère une assertion
- Persona livre l'assertion au gestionnaire
onlogin
de la page - Le gestionnaire
onlogin
rejète l'assertion, et redirige l'utilisateur vers la page de connexion - La page de connexion se charge, et appelle
navigator.id.watch()
. Nous retournons à l'étape 3.
Ceci car Persona essaye de se souvenir de l'adresse e-mail que vous voulez utilisez pour la connexion sur un site donné. Une fois que l'utilisateur a essayé de se connecté à votre site en tant que [email protected], Personna se souvient que c'est l'adresse que vous souhaitez utiliser pour ce site. Quand une nouvelle page se charge et appele navigator.id.watch()
avec un loggedInUser
à 'null
', Persona compare à nouveau avec sa valeur "[email protected]", et envoie l'assertion à nouveau.
Pour que Persona oublie l'association entre votre site l'adresse e-mail, appelez navigator.id.logout()
si vous ne souhaitez pas identifier l'utilisateur avec cette assertion. Ceci parce que l'assertion n'est pas valide, ou parce que vous ne voulez pas utiliser cette adresse e-mail.
Un scénario commun, où ce problème peut survenir, est quand un service veut autoriser ses utilisateurs à se connecter avec Persona, mais ne veut pas permettre de s'inscrire avec Persona, préférant un système d'inscription personnalisé pour les nouveaux utilisateurs. Dans ce cas, quand vous recevez l'assertion, vous vérifiez que l'adresse e-mail est bien celui d'un de vos utilisateurs, et si ce n'est pas le cas, vous rejetez la connexion. Si vous rejetez l'assertion, vous devez appeler navigator.id.logout()
.