asp.net-mvc-5 – 在默认的MVC5应用程序的帐户关联步骤中,从外部
显然,您可以通过向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 }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击
- asp.net-mvc – 数以千计的重定向不好SEO?
- asp.net-mvc-3 – Html.Action – 获取与发布
- 如何处理ASP.NET vNext中的调试/发布配置转换
- 获取会话在ASP.NET中优雅地过期
- asp.net-mvc – 如何将SQL CE 4 CTP部署到共享主机?
- asp.net – 为什么我不能将if和eval结合起来?最新的选择是
- .net – 如何获取客户端DotNetOpenAuth.OAuth2返回的错误消
- asp.net – 使用窗口域帐户进行身份验证的Web应用程序
- 动手造轮子:实现一个简单的依赖注入(一)
- SQLXML初体验:用XML代替T-SQL来操作数据库
- asp.net – 如何在使用Html.TextAreaFor时更改字
- asp.net – 获取客户端隐藏字段的值
- asp.net-mvc-3 – 请参阅控制器中的验证摘要
- asp.net – @ Html.EditorForModel()下拉列表
- asp.net-mvc – 如何确定视图是否为ASP.NET MVC中
- asp.net-mvc – 在ASP.Net MVC 2中为非归因模型验
- asp.net-mvc-4 – 在asp.net mvc应用程序中集成P
- asp.net-mvc – 我可以从动作过滤器返回动作结果
- ASP.NET FileUpload以及文件下载和Repeater控件显