Store не реализует IUserRoleStore <TUser>UserManager <TUser>.GetUserRoleStore () ASP.NET Core MVC 3 - PullRequest
0 голосов
/ 01 ноября 2019

Я реализовал Identity в Asp.Net.Core MVC 3, потому что у нас уже есть таблицы базы данных, которые мы хотим использовать. Я получаю сообщение об ошибке при вызове методов ниже, и они оба происходят в UserManager при одном и том же вызове метода. При взгляде на исходный код для этого метода это потому, что переменная Store является нулевой. Но я не совсем уверен, как сделать так, чтобы он не был нулевым. Я посмотрел на различные решения онлайн, но ни одно из них не решило мою проблему.

Мое решение работает с паролем SignInManager, но я не могу получить его, чтобы передать ошибку для ролей.

ConfigureServices Метод

public void ConfigureServices(IServiceCollection services)
{           
    services.AddControllersWithViews();
    services.AddMvc(options =>
    {
        var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
        options.Filters.Add(new AuthorizeFilter(policy));
        options.EnableEndpointRouting = false;
    });
    services.AddDbContext<EntitiesModel>(options => options.UseSqlServer(
            Configuration["Data:ConnectionStrings:XXXXXXXXXXXXX"]));
    services.AddIdentity<UserViewModel, UserRoleViewModel>().AddDefaultTokenProviders();
    services.AddTransient<IUserStore<UserViewModel>, UserStore>();
    services.AddTransient<IRoleStore<UserRoleViewModel>, RoleStore>();
    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;             
        options.LoginPath = "/Login";
        options.LogoutPath = "/Logout";
    });         
}

UserStore класс

public class UserStore : IUserStore<UserViewModel>, IUserPasswordStore<UserViewModel>, IUserEmailStore<UserViewModel>, IUserRoleStore<UserRoleViewModel>
{ 
....

RoleStore класс

public class RoleStore : IRoleStore<UserRoleViewModel>,IUserRoleStore<UserRoleViewModel>
{
....

UserViewModel класс

public class UserViewModel 
{
    [Key, Required]
    public int Id { get; set; }
    [Required, MaxLength(128)]
    public string UserName { get; set; }
    [Required, MaxLength(1024)]
    public string Password { get; set; }        
    public virtual ICollection<UserRoleViewModel> UserRoles { get; set; }
}

UserRoleViewRoleModel класс

public class UserRoleViewModel 
{    
    [Key, Required]
    public int Id { get; set; }
    [Required, ForeignKey(nameof(User))]
    public int UserId { get; set; }
    [Required, ForeignKey(nameof(Role))]
    public int RoleId { get; set; }
    public virtual RoleViewModel Role { get; set; }
    public virtual UserViewModel User { get; set; }
}

RoleViewModel класс

public class RoleViewModel 
{   
    [Key,Required]
    public int RoleId  { get; set; }
    [Required]
    public string RoleName { get; set; }
    public virtual  ICollection<UserRoleViewModel> UserRoles { get; set; }
}

**Calling Code**
//this works
var result = await signInManager.PasswordSignInAsync(user.UserName, user.Password, true, false);
//this fails
var test = await userManager.IsInRoleAsync(user, "Management");
//this fails
var roles = await userManager.GetRolesAsync(user);

ошибка

NotSupportedException: Store не реализует IUserRoleStore. Microsoft.AspNetCore.Identity.UserManager.GetUserRoleStore ()

Простите, если я структурировал это неправильно, но я новичок в этом, исходя из ASP.Net Web Forms

1 Ответ

1 голос
/ 01 ноября 2019

Не уверен, но, похоже, вы забыли добавить роль в файле start up.cs

    services.AddDefaultIdentity<UserViewModel>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<DbContext>();

Для получения дополнительной информации, пожалуйста, перейдите по ссылке ниже. http://qaru.site/questions/16512353/store-does-not-implement-iuserrolestoretuser-aspnet-core-21-identity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...