在控制器中获取当前登录用户的身份用户对象(来自身份框架)的正确方法是什么?
我需要针对用户更新一些属性(表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
对象呢?
在控制器类中,使用名称空间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();
}
}
已编辑
获取配置文件信息:此链接提供了向用户添加配置文件信息的步骤。
要检索您的用户数据,您应该:
- 获取当前登录的UserId,以便在中查找用户ASP.NET标识系统
var currentUserId=User.Identity.GetUserId();
- 在ASP.Identity系统中实例化UserManager,以便您可以查看向上显示系统中的用户
var manager=new UserManager(new UserStore(new MyDbContext()));
- 获取User对象
var currentUser=管理器。FindById(User.Identity.GetUserId());
- 获取有关用户的配置文件信息
currentUser.MyUserInfo.FirstName
获取用户名
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;
}