Asp.net外部登录(谷歌)获取所有用户详细信息

时间:2015-08-20 01:01:32

标签: asp.net asp.net-mvc login oauth google-plus

我正在Asp.Net网站上尝试外部登录(Oauth + Owin)。我可以在登录期间检索谷歌用户的名字,姓氏,电子邮件,性别等数据。但我无法检索用户的国家/地区,电话号码。

代码: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;
                }

我可以获取电子邮件,名字,姓氏,性别。但电话号码为空,因为它没有返回。 有没有办法从谷歌检索电话号码,州,国家等数据?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果用户未输入电话号码或未添加国家/地区,则无法返回此数据,因为谷歌没有。

如果您使用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查看基本内容   有关您帐户的信息

如果用户未将相关信息设置为 PUBLIC ,那么您也将无法看到它。即使您正在检查经过身份验证的用户的数据也是如此,如果它不公开,您无法从API中看到它。