在控制器中获取当前登录用户的身份用户对象(来自身份框架)的正确方法是什么?
我需要针对用户更新一些属性(表AspNetUsers),并且不知道获取用户对象的正确方法,以便我可以执行以下操作:
var menuItem = context.MenuItems.First(m => m.Description == "New Order");
var user = ??????????
user.MenuItems.Add(menuItem);
context.SaveChanges();
我通过添加一些属性并重命名该类来稍微修改原始用户模型:
public class User : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
public virtual ICollection<MenuItem> MenuItems { get; set; }
}
那么如何从控制器中检索这个User
对象?
答案 0 :(得分:3)
在控制器类中使用命名空间 Microsoft.AspNet.Identity 并获取当前用户:
var user = User.Identity;
示例:
using Microsoft.AspNet.Identity;
...
public class FooController : Controller
{
[Authorize]
public ActionResult Index()
{
var user = User.Identity;
...
return View();
}
}
<强>被修改强>
获取个人资料信息: This link提供了向用户添加个人资料信息的步骤。
要检索您的用户数据,您应该:
var currentUserId = User.Identity.GetUserId();
var manager = new UserManager(new UserStore(new MyDbContext()));
var currentUser = manager.FindById(User.Identity.GetUserId());
currentUser.MyUserInfo.FirstName
答案 1 :(得分:0)
获取用户名
var userName = User.Identity.Name;
Get the user using static method created below.
var user = GetCurrentUser(userName);
获取用户的静态方法
public static User GetCurrentUser(string userName)
{
var userManager = new UserManager<User>(new UserStore<User>(new YourIdentityDbContext()));
var user = userManager.FindByName(userName);
return user;
}