如何获取当前登录用户的用户对象



在控制器中获取当前登录用户的身份用户对象(来自身份框架)的正确方法是什么?

我需要针对用户更新一些属性(表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();
    }
}

已编辑

获取配置文件信息:此链接提供了向用户添加配置文件信息的步骤。

要检索您的用户数据,您应该:

  1. 获取当前登录的UserId,以便在中查找用户ASP.NET标识系统

var currentUserId=User.Identity.GetUserId();

  1. 在ASP.Identity系统中实例化UserManager,以便您可以查看向上显示系统中的用户

var manager=new UserManager(new UserStore(new MyDbContext()));

  1. 获取User对象

var currentUser=管理器。FindById(User.Identity.GetUserId());

  1. 获取有关用户的配置文件信息

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

相关内容

  • 没有找到相关文章

最新更新