DotNetOpenAuth, как получить адрес электронной почты и имя из OpenId

Я использую DotNetOpenAuth с MVC 3. Я могу пройти аутентификацию с помощью OpenId.

Итак, мой URL-адрес, указывающий на контроллер, имеет добавленную переменную OpenId =

Вот пример:

https://www.google.com/accounts/o8/id?id=DFtOawDkCUoLb3YxPzmrEI59-JiSZiAeR-NWw-0

http://mysite.com/Account/Register?OpenID= ...... .

Как я могу получить адрес электронной почты и имя учетной записи OpenId и отобразить их в представлении?

switch (response.Status)
            {
                case AuthenticationStatus.Authenticated:
                    LogOnModel lm = new LogOnModel();
                    lm.OpenID = response.ClaimedIdentifier;
                    // Check if user exist
                    MembershipUser user = MembershipService.GetUser(lm.OpenID);
                    if (user != null)
                    {
                        lm.UserName = user.UserName;
                        FormsService.SignIn(user.UserName, false);
                    }

                    return View("LogOn", lm);

                case AuthenticationStatus.Canceled:
                    ViewBag.Message = "Canceled at provider";
                    return View("LogOn");
                case AuthenticationStatus.Failed:
                    ViewBag.Message = response.Exception.Message;
                    return View("LogOn");
            }

person GibboK    schedule 13.07.2012    source источник


Ответы (1)


var fetchResponse = response.GetExtension<FetchResponse>();
string email = String.Empty; 
if (fetchResponse != null)
{
    email =  fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email);
}  

Но не забудьте спросить об этом при отправке запроса, чтобы пользователь мог разрешить вам иметь эту информацию на этапе аутентификации с помощью своего провайдера OpenId:

IAuthenticationRequest request = openid.CreateRequest(openidurl);
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
request.AddExtension(fetch);
request.RedirectToProvider();
person Darin Dimitrov    schedule 13.07.2012