Я реализовал 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