Migrieren der Authentifizierung und Identity ASP.NET Core

Von Steve Smith

Im vorherigen Artikel haben wir die Konfiguration von einem ASP.NET MVC-Projekt zu ASP.NET Core MVC migriert. In diesem Artikel migrieren wir die Registrierungs-, Anmelde- und Benutzerverwaltungsfeatures.

Konfigurieren Identity und Mitgliedschaft

In ASP.NET MVC werden Identity Authentifizierungs- und Identitätsfunktionen mithilfe von ASP.NET in Startup.Auth.csIdentityConfig.csund konfiguriert, die sich im ordner App_Start befinden. In ASP.NET Core MVC werden diese Funktionen in konfiguriertStartup.cs.

Installieren Sie die folgenden NuGet-Pakete:

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

Aktualisieren Startup.csSie in die - Startup.ConfigureServices Methode, um Entity Framework Dienste zu Identity verwenden:

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();
}

An diesem Punkt gibt es zwei Typen, auf die im obigen Code verwiesen wird, die wir noch nicht aus dem ASP.NET MVC-Projekt migriert haben: ApplicationDbContext und ApplicationUser. Erstellen Sie einen neuen Ordner Modelle im ASP.NET Core, und fügen Sie ihm zwei Klassen hinzu, die diesen Typen entspricht. Sie finden die ASP.NET MVC-Versionen dieser Klassen in /Models/IdentityModels.cs, aber wir verwenden eine Datei pro Klasse im migrierten Projekt, da dies eindeutiger ist.

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);
        }
    }
}

Das ASP.NET Core MVC Starter-Webprojekt umfasst nicht viele Anpassungen von Benutzern oder ApplicationDbContext. Wenn Sie eine echte App migrieren, DbContext müssen Sie auch alle benutzerdefinierten Eigenschaften und Methoden des Benutzers und der Klassen Ihrer App sowie alle anderen Modellklassen migrieren, die Ihre App verwendet. Wenn z. B. über DbContext verfügt DbSet<Album>, müssen Sie die -Klasse Album migrieren.

Wenn diese Dateien installiert sind, kann die Startup.cs Datei kompiliert werden, indem die -Anweisungen aktualisiert using werden:

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

Unsere App ist jetzt bereit, Authentifizierung und Dienste zu Identity unterstützen. Diese Features müssen lediglich für Benutzer verfügbar gemacht werden.

Migrieren der Registrierungs- und Anmeldelogik

Mit Identity Diensten, die für die App und den Datenzugriff konfiguriert sind, die mit Entity Framework und SQL Server konfiguriert wurden, können wir Unterstützung für die Registrierung und Anmeldung bei der App hinzufügen. Denken Sie daran, dass wir weiter oben im Migrationsprozess einen Verweis auf _LoginPartial in auskommentiert haben _Layout.cshtml. Nun ist es an der Zeit, zu diesem Code zurückzukehren, die Auskommentierung zu widerrufen und die erforderlichen Controller und Ansichten hinzuzufügen, um die Anmeldefunktionalität zu unterstützen.

Auskommentierung der @Html.Partial Zeile in :_Layout.cshtml

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

Fügen Sie nun eine neue Ansicht Razor namens _LoginPartial dem Ordner Views/Shared hinzu:

Aktualisieren _LoginPartial.cshtml Sie mit dem folgenden Code (ersetzen Sie den ganzen Inhalt):

@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>
}

An diesem Punkt sollten Sie die Website in Ihrem Browser aktualisieren können.

Zusammenfassung

ASP.NET Core führt Änderungen an den ASP.NET Identity ein. In diesem Artikel haben Sie erfahren, wie Identity Sie die Authentifizierungs- und Benutzerverwaltungsfeatures von ASP.NET zu ASP.NET Core.