MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como implementar a identidade ASP.NET Core 3.1 com o MongoDB?


Use os pacotes Mongo Identity NuGet disponíveis publicamente como substitutos para a identidade ASP.NET Core padrão. Poucos pacotes que ainda estão em manutenção são AspNetCore.Identity.Mongo e AspNetCore.Identity.MongoDbCore .

  1. Instale o pacote mais recente no NuGet (veja acima).

  2. Clique com o botão direito do mouse no seu projeto no painel "Solution Explorer"> Adicionar> Novo item com andaime...

    Selecione "Identidade" no painel esquerdo e clique duas vezes em Identidade no painel de seleção principal

  3. Nas janelas "Adicionar identidade", selecione todas ou a página que você gostaria de usar.

    Clique no botão "+" ao lado da entrada da classe de contexto de dados, adicione um novo (o nome não importa, pois você poderá excluí-lo depois) e faça o mesmo para a classe de usuário (nomeie bem, como ApplicationUser, este será o um que você usará no desenvolvimento posterior, alterá-lo levaria algum tempo e muito aborrecimento)

    para a classe User, você pode renomeá-lo como Namespace, como "[Your Project].Areas.Identity.Datas.ApplicationUser", isso será refletido no código scaffold.

3.1. Se necessário, você pode adicionar a classe Role, seria melhor criar no mesmo namespace que a classe User para categorizar seu código.
  1. Abra o arquivo "IdentityHostingStartup.cs" em [Your Project]/Areas/Identity, substitua o código pelo guia do GitHub, informações de configurações adicionais podem ser encontrado aqui
// 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. Registre o serviço de autenticação em Configure() método em Startup.cs pasta
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
}