sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur implementerar man ASP.NET Core 3.1 Identity med MongoDB?

Använd Mongo Identity NuGet-paket som är tillgängliga för allmänheten som ersättning för standard ASP.NET Core Identity. Få paket som fortfarande underhålls är AspNetCore.Identity.Mongo och AspNetCore.Identity.MongoDbCore .

  1. Installera det senaste paketet i NuGet (se ovan).

  2. Högerklicka på ditt projekt i panelen "Solution Explorer"> Lägg till> New Scaffolded Item...

    Välj "Identitet" på den vänstra panelen och dubbelklicka på Identitet i huvudvalspanelen

  3. I "Lägg till identitet"-fönster, välj alla eller sidan du vill använda.

    Klicka på "+"-knappen bredvid datakontextklassinmatning, lägg till en ny (namnet spelar ingen roll eftersom du kan ta bort det efteråt) och gör samma sak för användarklassen (namn den väl, som ApplicationUser, detta kommer att vara en som du kommer att använda i senare utveckling, att ändra den skulle ta lite tid och mycket krångel)

    för användarklassen kan du byta namn på den till namnområde, till exempel "[Ditt projekt].Areas.Identity.Datas.ApplicationUser", detta kommer att återspeglas i byggnadsställningskoden.

3.1. Om det behövs kan du lägga till rollklass, det skulle vara bättre att skapa på samma namnområde som användarklass för att kategorisera din kod.

  1. Öppna filen "IdentityHostingStartup.cs" i [Ditt projekt]/Areas/Identity, ersätt koden med guiden från GitHub, ytterligare inställningsinformation kan vara finns här
// 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. Registrera autentiseringstjänsten på Configure() metod i Startup.cs mapp
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. MongoDB MapReducera uppdatering på plats hur man

  2. MongoDB aggregerad grupp array till nyckel :summa värde

  3. Stoppa redis-servern. Varken avstängning eller stopp fungerar

  4. När ska MongoDB-databasanslutning stängas i Nodejs