如何在ASP.NET Core MVC中的控制器中获得自己的用户



我有用户类:

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中获取当前登录的当前登录一旦从索赔中获得值,就可以将值作为参数传递。

最新更新