对象名称无效'AspNetRoleClaims'登录时出现异常



,所以我为核心项目实现了身份。我已经成功完成了注册。因此,在尝试使用_signInmanager.passwordsignInasync登录时,我会得到异常无效的对象名称'aspnetroleclaims'。

我知道这是因为我的数据库中不存在Aspnetroleclaims表。但是idont知道该表的结构,我也不知道如何自动创建它,就像MVC中一样。

有人可以启发我为什么使用此表。或至少预期的结构是什么。

public async Task<IActionResult> RegisterSubmit(Registermodel rm)
{
        if (rm.role == "" || rm.role.Trim() == "-1")
        {
            return View();
        }
        else
        {
            var user = new ApplicationUser { UserName = rm.username, Email = rm.username, DeptName = rm.role };
            var result = await _userManager.CreateAsync(user, rm.Password);
            if (result.Succeeded)
            {
                 _userManager.GenerateEmailConfirmationTokenAsync(user);
                await _signInManager.SignInAsync(user, isPersistent: false);
                var roleexists = await _roleManager.RoleExistsAsync(rm.role);
                if (!roleexists)
                {
                    var role = new IdentityRole();
                    role.Name = rm.role;
                    await _roleManager.CreateAsync(role);
                }
                await _userManager.AddToRoleAsync(user, rm.role);
                user.Claims.Add(new IdentityUserClaim<string>
                {
                    ClaimType = "ProductUploadRequest",
                    ClaimValue = "Allow"
                });
            }
            return View("Login");

        }
    }

这是我的登录方法。

public async Task<IActionResult> Login(LoginIdentityModel lim)
{
        var result = await _signInManager.PasswordSignInAsync(lim.username, lim.password,false, lockoutOnFailure: false); //exception comes here
        if (result.Succeeded)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);
            UserProfileInfo userProfileInfo = new UserProfileInfo();
            userProfileInfo.UserId = new Guid(user.Id);
            userProfileInfo.FirstName = "test";
            userProfileInfo.UserName = lim.username;
            userProfileInfo.LastVisit = DateTime.Now;
            string query2 = "select ud.UserId,dp.Id DeptId,dp.Name DeptName,rd.Id RoleId,rd.Name RoleName,ud.[ReadWrite] from UserInDepartment ud inner join Department dp on ud.DeptId=dp.Id inner join RolesInDepartment rd on dp.Id=rd.DeptId and ud.RoleId=rd.Id where ud.UserId='" + user.Id + "' and dp.IsEnable=1 and rd.IsEnable=1 and ud.IsEnable=1";
            var userProfile = await _departMentalContext.UserProfiles.FromSql(query2).SingleOrDefaultAsync();
            if (userProfile != null)
            {
                Dictionary<int, string> deptValues = new Dictionary<int, string>() { { userProfile.DeptId, userProfile.DeptName } };
                userProfileInfo.Dept = deptValues;
                Dictionary<int, string> roleValues = new Dictionary<int, string>() { { userProfile.RoleId, userProfile.RoleName } };
                userProfileInfo.Role = roleValues;
                userProfileInfo.ReadOrWrite = userProfile.ReadWrite;
                HttpContext.Session.SetObject(UserProfileSessionName, userProfileInfo);
            }
            return View("/Home/DashBoard");
        }
        return View();
}

在使用EF时,您应该能够更新模型数据库。

您可以使用cli命令(learn.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet(。

或如果您使用的是Visual Studio,则可以在"软件包管理器"控制台中执行这些命令:

  • Add-Migration "init"

  • Update-Database

命令允许您在数据库中更新表。此外,它将创建迁移文件,这是您的模型的"图片"。执行命令Update-Database时,它加载了最后一个迁移文件。

相关内容

  • 没有找到相关文章

最新更新