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

Come implementare l'identità ASP.NET Core 3.1 con MongoDB?

Usare i pacchetti NuGet Mongo Identity disponibili nel pubblico come sostituti dell'identità ASP.NET Core predefinita. Pochi pacchetti ancora in manutenzione sono AspNetCore.Identity.Mongo e AspNetCore.Identity.MongoDbCore .

  1. Installa il pacchetto più recente in NuGet (vedi sopra).

  2. Fare clic con il pulsante destro del mouse sul progetto nel pannello "Esplora soluzioni"> Aggiungi> Nuovo elemento con ponteggio...

    Seleziona "Identità" nel pannello di sinistra e fai doppio clic su Identità nel pannello di selezione principale

  3. Nella finestra "Aggiungi identità", seleziona tutto o la pagina che desideri utilizzare.

    Fare clic sul pulsante "+" accanto all'input della classe del contesto dei dati, aggiungerne uno nuovo (il nome non ha importanza in quanto è possibile eliminarlo in seguito) e fare lo stesso per la classe Utente (denominarlo bene, ad esempio ApplicationUser, questo sarà il uno che utilizzerai nello sviluppo successivo, cambiarlo richiederebbe del tempo e molte seccature)

    per la classe User, puoi rinominarla come Namespace, ad esempio "[Your Project].Areas.Identity.Datas.ApplicationUser", questo si rifletterà sul codice dello scaffold.

3.1. Se necessario, puoi aggiungere la classe Role, sarebbe meglio creare sullo stesso spazio dei nomi della classe User per classificare il tuo codice.

  1. Apri il file "IdentityHostingStartup.cs" in [Your Project]/Areas/Identity, sostituisci il codice con la guida di GitHub, ulteriori informazioni sulle impostazioni possono essere trovato qui
// 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. Registra il servizio di autenticazione su Configure() metodo in Startup.cs cartella
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
}