【问题标题】:Get Authenticated Identity User data in ASP.NET MVC在 ASP.NET MVC 中获取经过身份验证的身份用户数据
【发布时间】:2021-01-10 17:34:44
【问题描述】:

我已经创建了一个 ASP.NET Identity Entity Framework,并在 ASP.NET Identity - MVC 中添加了一个注册和登录功能的客户字段

identityModel.cs

  public class ApplicationUser : IdentityUser
        {
            public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
            {
                // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
                var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                // Add custom user claims here
                return userIdentity;
            }
    
            //add custom fields
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public bool IsAdministrator { get; set; }
    
        }

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }

        public DbSet<Property> Property { get; set; }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }

在另一个名为 Property 的类中(登录和身份验证通过后)

我想调用 AspNetUsers 表中的一个字段,即当前登录的字段。我想检查 IsAdministrator 字段及其值,并根据该值对要查看的内容做一些条件。

这是我做过的,但没有成功

 public class PropertyController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();
        

        // GET: Property
        [Authorize]
        public async Task<ActionResult> Index()
        {

            var user = System.Web.HttpContext.Current.User.Identity.GetUserId();
            bool admin = db.Users.SingleOrDefault(y => y.Id.Equals("user")).IsAdministrator;
            //return View(await db.Property.ToListAsync());
            if (admin == true){
                return View(await db.Property.Where(x => x.PropertyID == 1).ToListAsync()); }
            else  {
                return View(await db.Property.ToListAsync());}
           
        }

我能够提取当前登录用户的用户 ID,但我想要用户的另一个字段或信息,即 IsAdmin 字段,它是 1 或 0。

我怎样才能做到这一点?

这不起作用

 bool admin = db.Users.SingleOrDefault(y => y.Id.Equals("user")).IsAdministrator;

错误

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity


    【解决方案1】:

    表达式SingleOrDefault(y =&gt; y.Id.Equals("user")) 没有任何意义。它将使用Id = "user" 搜索数据库用户,但一无所获。这就是为什么它返回 null 导致NullReferenceException

    尝试使用下面的sn-p

    ...
    var userId = System.Web.HttpContext.Current.User.Identity.GetUserName();
    var user = UserManager.FindByNameAsync(userId);
    var isAdmin = user.IsAdministrator;
    ...
    

    获取用户

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多