MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment implémenter ASP.NET Core 3.1 Identity avec MongoDB ?

Utilisez les packages Mongo Identity NuGet disponibles sur le public en remplacement de l'identité ASP.NET Core par défaut. Quelques packages encore en maintenance sont AspNetCore.Identity.Mongo et AspNetCore.Identity.MongoDbCore .

  1. Installez le dernier package dans NuGet (voir ci-dessus).

  2. Faites un clic droit sur votre projet dans le panneau "Explorateur de solutions"> Ajouter> Nouvel élément échafaudé...

    Sélectionnez "Identité" dans le panneau de gauche et double-cliquez sur Identité dans le panneau de sélection principal

  3. Dans les fenêtres "Ajouter une identité", sélectionnez toutes ou la page que vous souhaitez utiliser.

    Cliquez sur le bouton "+" à côté de l'entrée de la classe de contexte de données, ajoutez-en une nouvelle (le nom n'a pas d'importance car vous pouvez le supprimer par la suite), et faites de même pour la classe User (nommez-la bien, comme ApplicationUser, ce sera le celui que vous utiliserez dans un développement ultérieur, le changer prendrait du temps et beaucoup de tracas)

    pour la classe User, vous pouvez la renommer en Namespace, par exemple "[Your Project].Areas.Identity.Datas.ApplicationUser", cela sera reflété sur le code de l'échafaudage.

3.1. Si nécessaire, vous pouvez ajouter la classe Role, il serait préférable de créer sur le même espace de noms que la classe User pour catégoriser votre code.

  1. Ouvrez le fichier "IdentityHostingStartup.cs" dans [Your Project]/Areas/Identity, remplacez le code par le guide de GitHub, des informations supplémentaires sur les paramètres peuvent être trouvé ici
// 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. Enregistrer le service d'authentification sur Configure() méthode dans Startup.cs dossier
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
}