SigninManager funktioniert nicht, wenn er zur Laufzeit erstellt wurdeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 SigninManager funktioniert nicht, wenn er zur Laufzeit erstellt wurde

Post by Anonymous »

Ich habe eine C# Blazor -Webanwendung, die Benutzer mit dem SigninManager authentifizieren sollte. Die zu verwendende Datenbank ist jedoch zur Entwurfszeit nicht bekannt, sondern hängt von einem URL -Parameter ab. Daher kann ich keine ConnectionString im Programm verwenden.cs . In Program.cs ist nur ein Verweis auf eine Hauptdatenbank. Also habe ich zur Laufzeit einen SingninManager erstellt und versuchen, ihn zu verwenden. Der neu erstellte SigninManager verwendet jedoch immer die Hauptdatenbank aus programm.cs .

Code: Select all

var newConnectionString = "Data Source=...";

DynamicDbContext activeDbContext = new DynamicDbContext(newConnectionString);
using (var context = activeDbContext.ActiveDbContext)
{
ApplicationDbContext = context;
var userStore = new UserStore(context);
var options = Options.Create(new IdentityOptions());
var passwordHasher = new PasswordHasher();
var userValidator = new IUserValidator[0];
var passwordValidator = new IPasswordValidator[0];
var keyNormalizer = new UpperInvariantLookupNormalizer();
var errors = new IdentityErrorDescriber();
var services = new ServiceCollection().BuildServiceProvider();
var logger1 =  ServiceProvider.GetRequiredService();
var newUserManager = new UserManager(userStore, options, passwordHasher, userValidator, passwordValidator, keyNormalizer, errors, services, logger1);

var contextAccessor = ServiceProvider.GetRequiredService();
var claimsFactory = ServiceProvider.GetRequiredService();
var optionsAccessor = ServiceProvider.GetRequiredService();
var logger = ServiceProvider.GetRequiredService();
var schemes = ServiceProvider.GetRequiredService();
var confirmation = ServiceProvider.GetRequiredService();

var signInManager = new SignInManager(newUserManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation);

var result = await signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);

}

< /code>
Die letzte Codezeile schlägt zur Laufzeit fehl, da die Hauptdatenbank verwendet wird und die Tabellen daher [url=viewtopic.php?t=22532]nicht gefunden[/url] werden: Ich ändere die im Programm verwendete ConnectionString in Program.cs 
in eine bestimmte, die per URL an die Anwendung übergeben wird. Alles ist in Ordnung, aber dies funktioniert dann nur mit dieser festen Datenbank und kann daher nicht die Lösung sein.

Code: Select all

program.cs

...
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext(options =>
{
options.UseSqlServer(connectionString);
});

builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores()
.AddSignInManager()
.AddDefaultTokenProviders();
...
< /code>
Wie verbinde ich den SigninManager mit der dynamisch erstellten Datenbankverbindung? Jede Hilfe ist willkommen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post