asp.net-mvc-5 – 在默认的MVC5应用程序的帐户关联步骤中,从外部提供商Google和Facebook获取
|
显然,您可以通过向Startup.Auth.cs中的FacebookAuthenticationOptions对象添加范围来通过Facebook提供者执行此操作: http://blogs.msdn.com/b/webdev/archive/2013/10/16/get-more-information-from-social-providers-used-in-the-vs-2013-project-templates.aspx List<string> scope = new List<string>() { "email" };
var x = new FacebookAuthenticationOptions();
x.Scope.Add("email");
...
app.UseFacebookAuthentication(x);
如何与Google提供商一样? GoogleAuthenticationOptions类/对象没有x.Scope属性! 解决方法请在本帖子的底部看到更新!以下适用于我的Facebook: StartupAuth.cs: var facebookAuthenticationOptions = new FacebookAuthenticationOptions()
{
AppId = "x",AppSecret = "y"
};
facebookAuthenticationOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookAuthenticationOptions);
ExternalLoginCallback方法: var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email); var email = emailClaim.Value; 而对于Google: StartupAuth.cs app.UseGoogleAuthentication(); ExternalLoginCallback方法(与Facebook相同): var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email); var email = emailClaim.Value; 如果我在这里设置一个断点: var email = emailClaim.Value; 我在调试器中看到Facebook和Google的电子邮件地址。 更新1:旧的答案让我困惑,所以我更新了我在我自己的项目中的代码,我刚刚调试,我知道工作。 更新2:使用新的ASP.NET Identity 2.0 RTM版本,您不再需要此帖中的任何代码。获取电子邮件的正确方法是简单地执行以下操作: > Startup.Auth.cs app.UseFacebookAuthentication(
appId: "x",appSecret: "y");
app.UseGoogleAuthentication();
> AccountController.cs //
// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Sign in the user with this external login provider if the user already has a login
var result = await SignInHelper.ExternalSignIn(loginInfo,isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresTwoFactorAuthentication:
return RedirectToAction("SendCode",new { ReturnUrl = returnUrl });
case SignInStatus.Failure:
default:
// If the user does not have an account,then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation",new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- reportviewer – 在ASP.NET MVC中的RDLC报表中看不到或添加
- asp.net-mvc – 如何在运行时之前编译cshtml
- asp.net-mvc – MVC自定义ViewModel和自动绑定
- asp.net – 基类包含字段’X’,但其类型(System.Web.UI.Scr
- asp.net – 用JavaScript计算时间间隔
- asp.net-mvc – 在MVC5中呈现Razor的部分视图
- asp.net-mvc – ASP.NET MVC App中基于声明的条件编辑操作授
- 如何在服务器端缓存ASP.NET自定义HttpHandler响应
- asp.net-mvc-3 – 将字符串数组绑定到MVC Razor中的DropDow
- asp.net-mvc – 实现IModelBinder的最佳实践
- asp.net-mvc – 在视图中转义JavaScript字符串文
- asp.net-mvc – 如何为MVC4配置Ninject并提供自定
- 高性能ASP.NET站点( 1000请求/秒)
- asp.net-mvc – 如何通过URL传递日期,为我的Acti
- asp.net – 会话 – 多个浏览器选项卡 – 不同的
- asp.net-mvc-3 – 如何传递Request.QueryString到
- Asp.Net MVC缺少样式并默认为登录页面
- asp.net-mvc-3 – Telerik MVC网格,在运行时从集
- asp.net – 如何将标签元素与单选按钮相关联
- asp.net – Javascript:为什么如果(假)?
