MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie implementiert man ASP.NET Core 3.1 Identity mit MongoDB?

Verwenden Sie öffentlich verfügbare Mongo Identity NuGet-Pakete als Ersatz für die standardmäßige ASP.NET Core-Identität. Einige Pakete, die noch gewartet werden, sind AspNetCore.Identity.Mongo und AspNetCore.Identity.MongoDbCore .

  1. Installieren Sie das neueste Paket in NuGet (siehe oben).

  2. Klicken Sie im Bereich „Projektmappen-Explorer“ mit der rechten Maustaste auf Ihr Projekt> Hinzufügen> Neues Gerüstelement...

    Wählen Sie im linken Bereich "Identität" und doppelklicken Sie im Hauptauswahlbereich auf Identität

  3. Wählen Sie im Fenster "Identität hinzufügen" alle oder die Seite aus, die Sie verwenden möchten.

    Klicken Sie neben der Eingabe der Datenkontextklasse auf die Schaltfläche „+“, fügen Sie eine neue hinzu (der Name spielt keine Rolle, da Sie ihn später löschen können) und machen Sie dasselbe für die Benutzerklasse (benennen Sie sie gut, z. B. ApplicationUser, dies wird die eine, die Sie in der späteren Entwicklung verwenden werden, würde eine Änderung einige Zeit und viel Ärger kosten)

    für die User-Klasse können Sie sie in Namespace umbenennen, z. B. „[Your Project].Areas.Identity.Datas.ApplicationUser“, dies wird im Gerüstcode widergespiegelt.

3.1. Falls erforderlich, könnten Sie eine Rollenklasse hinzufügen, es wäre besser, sie im selben Namensraum wie die Benutzerklasse zu erstellen, um Ihren Code zu kategorisieren.

  1. Öffnen Sie die Datei „IdentityHostingStartup.cs“ in [Ihr Projekt]/Areas/Identity, ersetzen Sie den Code durch die Anleitung von GitHub, zusätzliche Einstellungsinformationen können hier zu finden
// Add Identity for AspNetCore.Identity.Mongo, ApplicationRole is optional
services.AddIdentityMongoDbProvider<ApplicationUser, ApplicationRole>(identityOptions =>
{
    // Password settings.
    identityOptions.Password.RequiredLength = 6;
    identityOptions.Password.RequireLowercase = true;
    identityOptions.Password.RequireUppercase = true;
    identityOptions.Password.RequireNonAlphanumeric = false;
    identityOptions.Password.RequireDigit = true;

    // Lockout settings.
    identityOptions.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    identityOptions.Lockout.MaxFailedAccessAttempts = 5;
    identityOptions.Lockout.AllowedForNewUsers = true;

    // User settings.
    identityOptions.User.AllowedUserNameCharacters =
      "ab[email protected]+";
    identityOptions.User.RequireUniqueEmail = true;
}, mongoIdentityOptions => {
    mongoIdentityOptions.ConnectionString = "mongodb://localhost:27017/MyDB";
    // mongoIdentityOptions.UsersCollection = "Custom User Collection Name, Default User";
    // mongoIdentityOptions.RolesCollection = "Custom Role Collection Name, Default Role";
}).AddDefaultUI(); //.AddDefaultUI() to temporary remove error when no EmailSender provided, see https://stackoverflow.com/questions/52089864/

// This is required to ensure server can identify user after login
services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(5);

    options.LoginPath = "/Identity/Account/Login";
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.SlidingExpiration = true;
});
  1. Authentifizierungsdienst bei Configure() registrieren -Methode in Startup.cs Ordner
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // code here...
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    // add app.UseAuthentication(); to register authentication service, without it, user could technically login but has no logged in session created.
    app.UseAuthentication();
    app.UseAuthorization();
    // more code
}