asp.net – 在成功登录时添加声明并在应用程序的其他位置检索它
发布时间:2020-12-16 00:17:12 所属栏目:asp.Net 来源:网络整理
导读:请求我帮助实现向经过身份验证的用户分配声明的自定义方式. 成功登录后, var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout: false); switch (result) { case SignInStatus.Success: //Get
请求我帮助实现向经过身份验证的用户分配声明的自定义方式.
成功登录后, var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout: false); switch (result) { case SignInStatus.Success: //Get the user ApplicationUser user = UserManager.FindByEmail(model.Email); //Ends here ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user,DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true },identity); 我使用userId从数据存储区中获取有关用户的角色和其他信息.此后,我需要在重定向到用户仪表板之前,使用电子邮件,角色,名字,姓氏,性别等信息添加有关用户的声明. 例如,当我想在登录部分显示电子邮件索赔值时,就像这样 var claims = ClaimsPrincipal.Current.Claims; var principal = (ClaimsPrincipal)Thread.CurrentPrincipal; var email = principal.Claims.Where(c => c.Type == ClaimTypes.Email).Select(c => c.Value).SingleOrDefault(); 它返回null. 因此,我只能在添加它们后使用相同的登录方法访问它们,但我需要能够从应用程序的任何位置访问它. 谢谢. 解决方法
您必须在登录前添加您的声明,而不是之后.考虑这个例子:
public async Task<ActionResult> Login(LoginViewModel model,string returnUrl) { var user = UserManager.Find(model.Email,model.Password); if(user!=null) { var ident = UserManager.CreateIdentity(user,DefaultAuthenticationTypes.ApplicationCookie); ident.AddClaims(new[] { new Claim("MyClaimName","MyClaimValue"),new Claim("YetAnotherClaim","YetAnotherValue"),}); AuthenticationManager.SignIn( new AuthenticationProperties() { IsPersistent = true },ident); return RedirectToLocal(returnUrl); } ModelState.AddModelError("","Invalid login attempt."); return View(model); } 现在,由于我们在登录时注入了索赔,因此我们可以随时随地访问索赔: ((ClaimsIdentity)User.Identity).FindFirst("MyClaimName"); 您还可以在ApplicationUser.GenerateUserIdentityAsync()方法中添加声明.通过在此方法中添加声明,您可以使用SignInManager.PasswordSignInAsync()方法登录用户,而无需修改默认的Login操作方法. public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { var userIdentity = await manager.CreateIdentityAsync(this,DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here userIdentity .AddClaims(new[] { new Claim("MyClaimName",}); return userIdentity; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 在MVC3区域中使用Webform
- asp.net – 是否有更好的方法来访问ITemplate中的控件而不是
- asp.net-mvc – ASP.NET MVC:除了IE之外,我如何向所有浏览
- asp.net-mvc – MVC 5防止通过iframe访问内容
- asp.net-web-api – 从OWIN中间件更改响应对象
- .net – IDataErrorInfo vs IValidatableObject?
- ASP.Net MVC 引用动态 js 脚本
- asp.net-mvc – 将MvcSiteMapProvider与属性和属性路由一起
- asp.net – 日期字段不会在Chrome浏览器中显示该值
- asp.net-mvc – 同一页面上的ASP.NET MVC模型绑定相关实体
推荐文章
站长推荐
- 启动ASP.NET窗体身份验证
- ASP.Net Response.Redirect不能在Application_Er
- asp.net-mvc – AutoMapper.Mapper不包含CreateM
- iis-7 – 从IIS 7上的经典ASP创建COM组件时出现“
- asp.net – 从Global.asax中获取操作的绝对URL路
- 如何从ASP.Net MVC中的JavaScript到TypeScript?
- asp.net单点登录不工作
- 如何使用ASP.Net SqlBulkCopy将常量值插入到列中
- asp.net – vs2010 – 用双引号括起String的快捷
- asp.net-mvc – 为什么visual studio 2012会在mv
热点阅读