sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo implementar ASP.NET Core 3.1 Identity con MongoDB?

Utilice los paquetes Mongo Identity NuGet disponibles públicamente como reemplazo de ASP.NET Core Identity predeterminado. Pocos paquetes que todavía están en mantenimiento son AspNetCore.Identity.Mongo y AspNetCore.Identity.MongoDbCore .

  1. Instale el último paquete en NuGet (ver arriba).

  2. Haga clic con el botón derecho en su proyecto en el panel "Explorador de soluciones"> Agregar> Nuevo elemento con scaffolding...

    Seleccione "Identidad" en el panel izquierdo y haga doble clic en Identidad en el panel de selección principal

  3. En las ventanas "Agregar identidad", seleccione todo o la página que le gustaría usar.

    Haga clic en el botón "+" además de la entrada de clase de contexto de datos, agregue uno nuevo (el nombre no importa, ya que podría eliminarlo después) y haga lo mismo para la clase de usuario (nómbrelo bien, como ApplicationUser, este será el uno que usará en el desarrollo posterior, cambiarlo tomaría algo de tiempo y muchas molestias)

    para la clase Usuario, puede cambiarle el nombre a Espacio de nombres, como "[Su proyecto].Áreas.Identidad.Datos.Usuario de la aplicación", esto se reflejará en el código de andamio.

3.1. Si es necesario, puede agregar la clase de rol, sería mejor crear en el mismo espacio de nombres que la clase de usuario para categorizar su código.

  1. Abra el archivo "IdentityHostingStartup.cs" en [Su proyecto]/Áreas/Identidad, reemplace el código con la guía de GitHub, la información de configuración adicional puede ser encontrado aquí
// 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. Registrar el servicio de autenticación en Configure() método en Startup.cs carpeta
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
}