sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan implementerer man ASP.NET Core 3.1 Identity med MongoDB?

Brug Mongo Identity NuGet-pakker, der er tilgængelige for offentligheden, som erstatning for standard ASP.NET Core Identity. Få pakker, der stadig er vedligeholdt, er AspNetCore.Identity.Mongo og AspNetCore.Identity.MongoDbCore .

  1. Installer den seneste pakke i NuGet (se ovenfor).

  2. Højreklik på dit projekt i panelet "Solution Explorer"> Tilføj> Nyt stilladseret element...

    Vælg "Identitet" i venstre panel, og dobbeltklik på Identitet i hovedvalgpanelet

  3. I vinduerne "Tilføj identitet" skal du vælge alle eller den side, du vil bruge.

    Klik på knappen "+" udover datakontekstklasseinput, tilføj en ny (navnet betyder ikke noget, da du kan slette det bagefter), og gør det samme for brugerklassen (navngiv det godt, f.eks. ApplicationUser, dette vil være en du vil bruge i senere udvikling, at ændre den ville tage lidt tid og masser af besvær)

    for brugerklassen kan du omdøbe det til navneområde, såsom "[Dit projekt].Areas.Identity.Datas.ApplicationUser", dette vil blive afspejlet på stilladskoden.

3.1. Hvis det kræves, kan du tilføje en rolleklasse, det ville være bedre at oprette på samme navneområde som brugerklassen for at kategorisere din kode.

  1. Åbn filen "IdentityHostingStartup.cs" i [Dit projekt]/Areas/Identity, erstat kode med guiden fra GitHub, yderligere indstillingsoplysninger kan være findes her
// 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. Registrer godkendelsestjeneste på Configure() metode i Startup.cs mappe
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
}



  1. Mongoose - kan du ikke få adgang til objektegenskaber?

  2. Sådan administreres store databaser effektivt

  3. Batchopdatering med Mongoose

  4. Hvordan beskriver jeg en samling i Mongo?