我有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方法?
答案 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获取值后,就可以将该值作为参数传递。