Ich möchte Microsoft.AspNetCore.Identity
verwenden, aber ohne EntityFramework
- Ich versuche, meine eigene Implementierung von IUserStore
zu verwenden. Ich habe nicht entschieden, welche Datenbank zu verwenden, aber ich denke, dass es für diese Frage unerheblich ist.Probleme bei der Implementierung von IUserStore
Relevante Klassen, möglichst abgespeckte:
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddUserStore<CustomUserStore<ApplicationUser>>()
.AddUserManager<CustomUserManager>();
}
ApplicationUser:
public class ApplicationUser
{
public string UserName { get; set; }
public string Email { get; set; }
}
CustomUserStor:
public class CustomUserStore<TUser> : IUserStore<TUser> where TUser : ApplicationUser
{
private bool _disposed;
public async Task<IdentityResult> CreateAsync(TUser user, CancellationToken cancellationToken = default(CancellationToken))
{
//Trying to hit a breakpoint here
throw new NotImplementedException();
}
//Other method implementations removed for brevity
void IDisposable.Dispose()
{
_disposed = true;
}
}
CustomUserManager:
public class CustomUserManager : UserManager<ApplicationUser>
{
public CustomUserManager(IUserStore<ApplicationUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<ApplicationUser> passwordHasher, IEnumerable<IUserValidator<ApplicationUser>> userValidators, IEnumerable<IPasswordValidator<ApplicationUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<ApplicationUser>> logger)
: base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors,services,logger)
{
}
public override async Task<IdentityResult> CreateAsync(ApplicationUser user)
{
// Trying to hit a breakpoint here
return await this.Store.CreateAsync(user, new CancellationToken());
}
}
ExampleController:
[Route("api/example")]
public class ExampleController : Controller
{
private CustomUserManager _userManager;
public ExampleController(CustomUserManager userManager)
{
_userManager = userManager;
}
[Route("test")]
public void Test()
{
var user = new ApplicationUser { UserName = "something", Email = "somthingElse" };
_userManager.CreateAsync(user, "password");
}
}
Wenn ich die URL traf ich verwende es zu testen: api/example/test
, wird der Konstruktor in CustomUserManager
getroffen, aber nicht CreateAsync
in CustomUserManager
, und so wird nichts ingetroffen.
Guter Ort. Dummer Fehler. – user888734