Eseguire la migrazione dell'autenticazione e Identity a ASP.NET Core

Di Steve Smith

Nell'articolo precedente è stata eseguita la migrazione della configurazione da un progetto MVC ASP.NET a ASP.NET Core MVC. In questo articolo viene eseguita la migrazione delle funzionalità di registrazione, accesso e gestione degli utenti.

Configurare e appartenenze Identity

In ASP.NET MVC, le funzionalità di autenticazione e identità vengono configurate usando ASP.NET Identity in Startup.Auth.cs e IdentityConfig.cs, che si trova nella cartella App_Start . In ASP.NET Core MVC queste funzionalità sono configurate in Startup.cs.

Installare i pacchetti NuGet seguenti:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.AspNetCore.Authentication.Cookies
  • Microsoft.EntityFrameworkCore.SqlServer

In Startup.csaggiornare il Startup.ConfigureServices metodo per usare Entity Framework e Identity i servizi:

public void ConfigureServices(IServiceCollection services)
{
    // Add EF services to the services container.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

     services.AddMvc();
}

A questo punto, nel codice precedente sono presenti due tipi a cui non è ancora stata eseguita la migrazione dal progetto MVC ASP.NET: ApplicationDbContext e ApplicationUser. Creare una nuova cartella Models nel progetto ASP.NET Core e aggiungervi due classi corrispondenti a questi tipi. Si troveranno le versioni MVC ASP.NET di queste classi in /Models/IdentityModels.cs, ma verrà usato un file per classe nel progetto migrato perché è più chiaro.

ApplicationUser.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

namespace NewMvcProject.Models
{
    public class ApplicationUser : IdentityUser
    {
    }
}

ApplicationDbContext.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity;

namespace NewMvcProject.Models
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Core Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Core Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

Il progetto Web di base MVC Core ASP.NET non include molte personalizzazioni degli utenti o .ApplicationDbContext Quando si esegue la migrazione di un'app reale, è anche necessario eseguire la migrazione di tutte le proprietà e i metodi personalizzati dell'utente e DbContext delle classi dell'app, nonché di qualsiasi altra classe model usano l'app. Ad esempio, se è DbContext presente un DbSet<Album>oggetto , è necessario eseguire la migrazione della Album classe .

Con questi file sul posto, il Startup.cs file può essere creato per la compilazione aggiornando le relative using istruzioni:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

L'app è ora pronta per supportare l'autenticazione e Identity i servizi. È sufficiente che queste funzionalità siano esposte agli utenti.

Eseguire la migrazione della logica di registrazione e accesso

Con Identity i servizi configurati per l'app e l'accesso ai dati configurati con Entity Framework e SQL Server, è possibile aggiungere il supporto per la registrazione e l'accesso all'app. Tenere presente che in precedenza nel processo di migrazione è stato impostato un riferimento a _LoginPartial in _Layout.cshtml. È ora possibile tornare a tale codice, rimuovere il commento e aggiungere i controller e le visualizzazioni necessari per supportare la funzionalità di accesso.

Rimuovere il commento dalla @Html.Partial riga in _Layout.cshtml:

      <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
    @*@Html.Partial("_LoginPartial")*@
  </div>
</div>

Aggiungere ora una nuova Razor visualizzazione denominata _LoginPartial alla cartella Views/Shared :

Eseguire l'aggiornamento _LoginPartial.cshtml con il codice seguente (sostituire tutto il relativo contenuto):

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
        <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

A questo punto, dovrebbe essere possibile aggiornare il sito nel browser.

Riepilogo

ASP.NET Core introduce modifiche alle funzionalità di ASP.NET Identity . In questo articolo è stato illustrato come eseguire la migrazione delle funzionalità di autenticazione e gestione degli utenti di ASP.NET a ASP.NET Identity Core.