我正在使用VS2013中新的MVC 5模板随附的ASP.NET身份。我已经配置了外部登录提供商,因此人们可以使用Google,Facebook或Microsoft注册。但是,我仍然想获得人民的电子邮件地址(例如,用于通知,更新等)。
。默认情况下,app.UseGoogleAuthentication()
还将请求用户的电子邮件地址。对于Facebook,我创建了FacebookAuthenticationOptions
类的新实例,并添加了以下范围:facebook.Scope.Add("email")
。这也有效。
我在使用Microsoft帐户的人获取电子邮件时遇到问题。MicrosoftAccountAuthenticationOptions
还具有Scope
属性,但添加email
似乎不起作用。在文档中,我看到有一个示波器wl.emails
,但它返回了一系列电子邮件地址,我不确定这是否与Facebook的email
相等。
有人有建议如何在身份验证时将电子邮件地址作为索赔?
-
配置Microsoft的范围。
var mo = new MicrosoftAccountAuthenticationOptions { Caption = "Live", ClientId = clientId, ClientSecret = clientSecret, }; mo.Scope.Add("wl.basic"); mo.Scope.Add("wl.emails"); app.UseMicrosoftAccountAuthentication(mo);
-
获取电子邮件索赔
var identity = await AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie); var emailClaim = identity.Identity.FindFirst(ClaimTypes.Email);
希望这对您有帮助。
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountAuthenticationOptions()
{
ClientId = "Your_client_id",
ClientSecret = "your_client_secret_key",
Scope = { "wl.basic", "wl.emails" }
});
并获得电子邮件
var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync();
string email=externalIdentity.Result.Email;