Pregunta

Estoy usando dotnetopenauth 3.2 para implementar OpenID y no puedo encontrar la manera de hacer que Google pase a la dirección de correo electrónico en la Respuesta de Reclamaciones. Sé que Google no admite registro simple, pero no puedo determinar lo que ellos apoyan.

advertencia a esta pregunta es que acabo de comenzar el aprendizaje de OpenID y sé que no tengo un conocimiento sólido de la especificación que creo que está dando lugar a mi confusión.

Cualquier ayuda se agradece!

¿Fue útil?

Solución

Ok lo descubrió. He publicado una pregunta sobre de Goolge y me dijeron que usar atributo de cambio .

A continuación se muestra el código para DotNetOpenAuth .

Por favor, no utilice este código en la producción. Esto es sólo para fines ilustrativos!

La Solicitud:

using (OpenIdRelyingParty openid = new OpenIdRelyingParty())
{
    IAuthenticationRequest request = openid.CreateRequest(openidurl);

    var fetch = new FetchRequest();
    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
    request.AddExtension(fetch);

    // Send your visitor to their Provider for authentication.
    request.RedirectToProvider();
}

La respuesta:

OpenIdRelyingParty openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response != null)
{
    switch (response.Status)
    {
        case AuthenticationStatus.Authenticated:
        {
            var fetch = response.GetExtension<FetchResponse>();
            string email = string.Empty();
            if (fetch != null)
            {
                email =  fetch.GetAttributeValue(
                    WellKnownAttributes.Contact.Email);
            }

            FormsAuthentication.RedirectFromLoginPage(
                response.ClaimedIdentifier, false);
            break;
        }
        ...
    }
}

Otros consejos

Cuando intento de obtener el nombre completo de la respuesta es nula, por favor proporcionar una solución para obtener el nombre completo, Este post está realmente ayudar a ful Gracias. Mi código de ejemplo como éste.

var fetch = new FetchRequest();
            fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
            fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
            fetch.Attributes.AddRequired(WellKnownAttributes.Company.CompanyName);
            //fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);

            request.AddExtension(fetch);

y

if (fetch != null)
         {
             email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
             name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);
             company = fetch.GetAttributeValue(WellKnownAttributes.Company.CompanyName);
         } 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top