我有用户类:
public class User : Entity
{
public void AcceptMenu(Menu menu)
{
//AcceptMenu
}
public string Login { get; set; }
public string Password { get; set; }
public string Salt { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我创建了授权逻辑。身份验证的方法如下:
private async Task Authenticate(User user)
{
var claims = new List<Claim>
{
new Claim(ClaimsIdentity.DefaultNameClaimType, user.Login),
new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role)
};
ClaimsIdentity id = new ClaimsIdentity(claims, "ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(id));
}
您可以看到,我在用户中有接受方法。我如何在控制器中获得用户并执行AcceptMenu方法?
控制器具有带有IPrincipal
类型的属性用户。您可以使用User.Identity.Name
获取用户名,但它是身份验证的ASP.NET用户的名称。您可以在用户类中映射此已验证的用户。在控制器
ApplicationUserManager UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
ApplicationUser user = await UserManager.FindByEmailAsync(User.Identity.Name);
当ApplicationUserManager是具有身份配置的类别,而Applicationuser是此类的IdentityUser。但这不是您从实体类派生的数据库用户,应该手动映射
如果您登录时,您可以随时使用var loggedInUser = await useManager.GetUserAsync(User)
获取用户。
如何在asp.net core中获取当前登录的当前登录一旦从索赔中获得值,就可以将值作为参数传递。