2009-10-08 6 views
1

je suis en train d'installer DotNetOpenAuth en utilisant la OpenIdAjaxTextBox mais j'ai deux problèmesDotNetOpenAuth obtenir email et redirigez problème

  1. je veux être en mesure d'obtenir l'adresse e-mail des utilisateurs et je pense que cela est fait dans le loggedin événement (droit?) mais cet événement n'est jamais appelé, j'ai essayé d'y mettre un point d'arrêt mais je n'y arrive jamais. Quand je tape dans le fournisseur openid dans le OpenIdAjaxTextBox (disons Gmail), je reçois le bouton de connexion dans la zone de texte, donc je clique dessus une nouvelle fenêtre apparaît et affiche le formulaire de connexion Gmail mais après je tape mon nom d'utilisateur et mot de passe et cliquez sur connexion que la fenêtre popup rafraîchir et mon propre site charge dans cette fenêtre, je m'attendrais à ce que la fenêtre pop-up se ferme après que je me connecte ne pas rediriger vers mon site.

est ici le code I à l'aide

<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty" 
    TagPrefix="openid" %> 

    <openid:OpenIdAjaxTextBox ID="OpenIdAjaxTextBox1" runat="server" 
     OnLoggingIn="openIdtxtbx_LoggingIn" 
     OnLoggedIn="openIdtxtbx_LoggedIn" 
     OnClientAssertionReceived="onauthenticated(sender)" 
     OnUnconfirmedPositiveAssertion="openIdtxtbx_UnconfirmedPositiveAssertion" /> 

    Protected Sub openIdtxtbx_LoggedIn(ByVal sender As Object, ByVal e As OpenIdEventArgs) 
     ' Do something here 
     Dim claimedId As String = e.Response.Status 
    End Sub 

    Protected Sub openIdtxtbx_LoggingIn(ByVal sender As Object, ByVal e As OpenIdEventArgs) 
     ' Retrieve the email address of the user 
     Dim c As New ClaimsRequest 
     c.Email = DemandLevel.Require 
     e.Request.AddExtension(c) 
    End Sub 

    Protected Sub openIdtxtbx_UnconfirmedPositiveAssertion(ByVal sender As Object, ByVal e As OpenIdEventArgs) 
     ' This is where we register extensions that we want to have available in javascript 
     ' on the browser. 
     OpenIdAjaxTextBox1.RegisterClientScriptExtension(Of ClaimsResponse)("sreg") 
    End Sub 

Répondre

0

L'événement OpenIdAjaxTextBox.LoggedIn ne se déclenche pas jusqu'à ce qu'un postback de la page Web - un bouton d'envoi de quelque sorte. Le bouton de connexion de la zone de texte n'est pas une publication, vous devez donc ajouter un autre bouton de soumission à votre page.

e.Response.Status est et non un identifiant revendiqué. Vous devez changer votre gestionnaire d'événements LoggedIn lire:

Dim claimedId As String = e.ClaimedIdentifier 

Vous ne recevrez pas une adresse e-mail de Google à l'aide ClaimsRequest sauf si vous utilisez le comportement AXFetchAsSregTransform. Enfin, en ce qui concerne la fenêtre pop-up ne disparaissant pas à la fin de la connexion ... cela devrait fonctionner comme vous le souhaitez. Mais il y a un "bug" que le OpenIdAjaxTextBox ne supporte pas les réponses POST, ce qui est ce que vous obtenez lorsque vous demandez des attributs en raison de la taille de la charge utile de réponse. v3.3 corrige ce problème, mais il n'est pas encore publié. Désolé pour ça.

+0

1. J'ai effectué une publication et l'événement LoggedIn se déclenche comme prévu. – Murre

+0

2. à propos de la fenêtre contextuelle, j'ai couru l'échantillon et j'ai été capable de reproduire le problème là. J'ai modfied la ligne 14 ajaxlogin.aspx.cs de Email = DemandLevel.Request, à Email = DemandLevel.Require, alors je viens de changer le niveau de la demande à Exiger et cela provoque la fermeture de la fenêtre popup. J'ai donc fait un peu plus de débogage et j'ai découvert que l'erreur est due à une "instance d'un objet introuvable" qui provient de la "ReportAuthenticationResult() ligne 1413" dans le codage source (v.3.2.2.9257). (J'ai essayé google et yahoo en tant que fournisseur openid.) une idée de ce que je fais mal? – Murre

+0

btw, tu fais un boulot génial avec openid Andrew :) ceux que mon application web est en marche tu peux espérer un don – Murre