2011-04-28 17 views
6

No puedo obtener la dirección de correo electrónico devuelta en el método GetExtension, pero está incluida en la URL que Google (el OP con el que estoy probando) me envía de vuelta.Obtener dirección de correo electrónico del proveedor de OpenID con DotNetOpenAuth

if (Page.IsPostBack) 
{ 
    using (var openid = new OpenIdRelyingParty()) 
    { 
     var request = openid.CreateRequest(Request.Form["openid_identifier"]); 

     var fetch = new FetchRequest(); 
     fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email, true)); 

     request.AddExtension(fetch); 

     request.RedirectToProvider(); 
    } 
} 
else 
{ 
    using (var openid = new OpenIdRelyingParty()) 
    { 
     var response = openid.GetResponse(); 
     if (response != null) 
     { 
      switch (response.Status) 
      { 
       case AuthenticationStatus.Authenticated: 
        var claimsResponse = response.GetExtension<FetchRequest>(); 
        break; 
       case AuthenticationStatus.Canceled: 
        //this.loginCanceledLabel.Visible = true; 
        break; 
       case AuthenticationStatus.SetupRequired: 
        //this.loginFailedLabel.Visible = true; 
        break; 

       // We don't need to handle SetupRequired because we're not setting 
       // IAuthenticationRequest.Mode to immediate mode. 
       ////case AuthenticationStatus.SetupRequired: 
       //// break; 
      } 
     } 
    } 
} 

¿Alguien sabe qué pasa?

+0

" pero está incluido en la URL que Google "... Parece que falta una parte de su pregunta. Cuidado para revisar, por favor? – joce

+0

fijo. Gracias ... – Carol

Respuesta

6

Prueba el siguiente código:

switch (response.Status) 
{ 
    case AuthenticationStatus.Authenticated: 
     var fetch = response.GetExtension<FetchResponse>(); 
     string email = String.Empty; 
     if (fetch != null) 
     { 
      email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email); 
     } 
     break; 
    //... 
} 
+0

eso es lo que estoy haciendo en mi código, pero response.GetExtension () siempre devuelve nulo – Carol

+0

estás en lo correcto ... Estoy usando FetchRequest en lugar de FetchResponse ... ¡gracias! – Carol

+0

@Carol: Me alegro de que funcionó. – Kamyar

2

Ninguna de las anteriores trabajado para mí (a través de PayPal Access como un identificador) en C#

La continuación trabajó para mí:

OpenIdRelyingParty openid = new OpenIdRelyingParty(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     var response = openid.GetResponse(); 

     if (response != null) 
     { 
      switch (response.Status) 
      { 
       case AuthenticationStatus.Authenticated: 

        if (this.Request.Params["openid.ext1.value.alias1"] != null) 
        { 
         Response.Write(this.Request.Params["openid.ext1.value.alias1"]); 
         Response.Write(this.Request.Params["openid.ext1.value.alias2"]); 
        } 
        else { 
         Response.Write("Alias wrong"); 
        } 
        break; 
      } 
     } 
    } 
    protected void loginButton_Click(object sender, EventArgs e) 
    { 

     var openidRequest = openid.CreateRequest(openIdBox.Text); 
     var fetch = new FetchRequest(); 

     fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
     fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName); 
     openidRequest.AddExtension(fetch); 

     openidRequest.RedirectToProvider(); 

    } 
+0

ty esto funcionó para mí también :) –

Cuestiones relacionadas