2015-08-20 2 views
2

Я пытаюсь использовать внешний вход (Oauth + Owin) на сайте Asp.Net. Я могу получить данные, такие как имя, фамилия, адрес электронной почты, пол и т. Д. Пользователя Google во время ввода. Но я не могу получить страну пользователя, номер телефона.Asp.net External Login (google) получает все данные пользователя

Код: Startup.Auth.cs Это добавляет все претензии

 var googleOptions = new GoogleOAuth2AuthenticationOptions() 
     { 
      ClientId = "************com", 
      ClientSecret = "***********", 
      Provider = new GoogleOAuth2AuthenticationProvider() 
      { 
       OnAuthenticated = (context) => 
       { 
        foreach (var claim in context.User) 
        { 
         var claimType = string.Format("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/{0}", claim.Key); 
         string claimValue = claim.Value.ToString(); 
          context.Identity.AddClaim(new Claim(claimType, claimValue, "http://www.w3.org/2001/XMLSchema#string")); 
        } 

        return Task.FromResult(0); 
       } 
      } 
     }; 
     app.UseGoogleAuthentication(googleOptions); 

AccountsController:

   if (loginInfo.Login.LoginProvider == "Google") 
       { 
        var externalIdentity = AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); 

        var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email); 
        var lastNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname); 
        var givenNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName); 
        var addressClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.StreetAddress); 
        var countryClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Country); 
        var stateClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.StateOrProvince); 
        var postalClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.PostalCode); 
        var phoneClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.MobilePhone); 

        var genderClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Gender); 




        var email = emailClaim.Value; 
        var firstName = givenNameClaim.Value; 
        var lastname = lastNameClaim.Value; 
        var gender = genderClaim.Value; 
        //var phone = phoneClaim.Value; 
       } 

Я в состоянии получить электронную почту, Firstname, фамилия, пол. Но номер телефона равен null, поскольку он не возвращается. Есть ли способ получить данные, такие как номер телефона, состояние, страну из Google?

Заранее спасибо

+0

Вам нужно будет запросить дополнительные области: https://developers.google.com/+/web/api/rest/oauth#login-scopes. Я не уверен, но я не думаю, что информация доступна. –

ответ

0

Если пользователь либо не ввели номер телефона или не добавил страну, то он не сможет вернуть эти данные в Google не имеет его.

Если вы проверите его, используйте Try It. Со всеми различных областей

https://www.googleapis.com/auth/plus.login Знайте ваш основной профиль данные и список людей в ваших кругах.

https://www.googleapis.com/auth/plus.me Знайте, кто вы на Google https://www.googleapis.com/auth/userinfo.email Просмотреть ваш адрес электронной почты https://www.googleapis.com/auth/userinfo.profile Просмотр основной информация о вашем аккаунте

Если пользователь не установил указанную информацию для ОБЩЕСТВЕННОГО тогда вы также не сможет его увидеть. Это верно, даже если вы проверяете данные для аутентифицированного пользователя, если его не публикуете, вы не видите его из API.

Смежные вопросы