我如何在Asp.net Core MVC的控制器中获得自己的用户

时间:2019-05-17 08:11:56

标签: c# asp.net-mvc asp.net-core

我有User类:

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));
    }

如您所见,我在User中有AcceptMenu方法。如何在Controller中获取User并执行AcceptMenu方法?

3 个答案:

答案 0 :(得分:2)

控制器的属性为User,类型为IPrincipal。您可以使用User.Identity.Name获取用户名,但这是经过身份验证的asp.net用户名。您可以将这个Authenticated用户与您的用户类进行映射。 在控制器中

ApplicationUserManager UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

ApplicationUser  user = await UserManager.FindByEmailAsync(User.Identity.Name);

其中ApplicationUserManager是具有Identity config的类,而ApplicationUser是此类中的IdentityUser。但这不是您的db User源自实体类,应该手动映射

答案 1 :(得分:0)

如果您已登录,则始终可以使用var loggedInUser = await useManager.GetUserAsync(User)来获取用户。

答案 2 :(得分:0)

How to get the current logged in user Id in ASP.NET Core 从ClaimsPricipal获取值后,就可以将该值作为参数传递。