【问题标题】:Store does not implement IUserRoleStore<TUser> UserManager<TUser>.GetUserRoleStore() ASP.NET Core MVC 3商店没有实现 IUserRoleStore<TUser> UserManager<TUser>.GetUserRoleStore() ASP.NET Core MVC 3
【发布时间】:2020-02-27 11:10:48
【问题描述】:

我在Asp.Net.Core MVC 3 中实现了Identity,因为我们已经有了要使用的数据库表。调用下面的方法时出现错误,它们都发生在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:存储未实现 IUserRoleStore。 Microsoft.AspNetCore.Identity.UserManager.GetUserRoleStore()

如果我的结构方式不正确,请原谅我,但我是来自 ASP.Net Web 表单的新手

【问题讨论】:

标签: c# asp.net-core roles asp.net-core-identity


【解决方案1】:

不确定,但您似乎忘记在 startup.cs 文件中添加角色

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

请在下面的链接中找到更多参考。 http://qaru.site/questions/16512353/store-does-not-implement-iuserrolestoretuser-aspnet-core-21-identity

【讨论】:

  • 您是否将 IdentityUser 继承到您的用户模型?例如 UserViewModel:IdentityUser。按照我与您分享的链接尝试。
  • 谢谢,您的答案可能是正确的,但我仍在努力。
  • 我已经根据链接继承了 IdentityUser 但我仍然收到错误。
  • 我已经在stackoverflow.com/questions/58702588/…这个问题上发布了悬赏,并将悬赏这个问题。
【解决方案2】:

删除下面的行:

services.AddTransient, UserStore>();

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多