我正在使用VS2013中新MVC 5模板附带的ASP.NET Identity。我已配置外部登录提供商,以便人们可以使用Google,Facebook或Microsoft注册。但是,我仍然希望获得人们的电子邮件地址(例如,通知,更新等)。
默认情况下,app.UseGoogleAuthentication()
也会请求用户的电子邮件地址。对于Facebook,我创建了FacebookAuthenticationOptions
类的新实例,并添加了以下范围:facebook.Scope.Add("email")
。这也有效。
我在使用Microsoft帐户的人收到电子邮件时遇到问题。 MicrosoftAccountAuthenticationOptions
也有Scope
属性,但添加email
似乎不起作用。在documentation我看到有一个范围wl.emails
,但它返回一个电子邮件地址数组,我不确定这是否等同于email
与Facebook。
有人建议如何在验证时将电子邮件地址作为声明吗?
答案 0 :(得分:16)
配置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);
希望这会对你有所帮助。
答案 1 :(得分:0)
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;