Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor: Steve Smith
W poprzednim artykule zmigrowaliśmy konfigurację z projektu MVC ASP.NET do ASP.NET Core MVC. W tym artykule migrujemy funkcje rejestracji, logowania i zarządzania użytkownikami.
Skonfiguruj Identity i członkostwo
W ASP.NET MVC funkcje uwierzytelniania i tożsamości są konfigurowane przy użyciu ASP.NET Identity w Startup.Auth.cs i IdentityConfig.cs, znajdujących się w folderze App_Start. W usłudze ASP.NET Core MVC te funkcje są konfigurowane w programie Startup.cs.
Zainstaluj następujące pakiety NuGet:
Microsoft.AspNetCore.Identity.EntityFrameworkCoreMicrosoft.AspNetCore.Authentication.CookiesMicrosoft.EntityFrameworkCore.SqlServer
Ostrzeżenie
W tym artykule przedstawiono użycie łańcuchów połączenia. Gdy lokalna baza danych jest używana do programowania i testowania, uwierzytelnianie użytkowników bazy danych za pośrednictwem parametry połączenia nie jest wymagane. W środowiskach produkcyjnych parametry połączenia czasami zawierają hasło do uwierzytelniania dostępu do bazy danych lub operacji bazy danych. Poświadczenie hasłem właściciela zasobu (ROPC) w ciągu połączenia stanowi zagrożenie bezpieczeństwa i należy go unikać w aplikacjach produkcyjnych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz tematy dotyczące zabezpieczeń ASP.NET Core.
W Startup.cs zaktualizuj metodę Startup.ConfigureServices, aby używała Entity Framework oraz usług Identity:
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();
}
W tym momencie istnieją dwa typy, do których odwołujemy się w powyższym kodzie, które nie zostały jeszcze zmigrowane z projektu ASP.NET MVC: ApplicationDbContext i ApplicationUser. Utwórz nowy folder Models w projekcie ASP.NET Core i dodaj do niego dwie klasy odpowiadające tym typom. Wersje MVC tych klas ASP.NET znajdują się w /Models/IdentityModels.cspliku , ale użyjemy jednego pliku na klasę w zmigrowanym projekcie, ponieważ jest to bardziej jasne.
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);
}
}
}
Startowy projekt aplikacji internetowej ASP.NET Core MVC nie obejmuje zbyt wielu możliwości dostosowywania użytkowników ani elementu ApplicationDbContext. Podczas migrowania rzeczywistej aplikacji należy również przeprowadzić migrację wszystkich właściwości niestandardowych i metod użytkowników i DbContext klas aplikacji, a także innych klas modelu używanych przez aplikację. Jeśli na przykład element DbContext ma klasę DbSet<Album>, musisz przeprowadzić migrację klasy Album.
Po umieszczeniu tych plików plik Startup.cs można skompilować, aktualizując jego instrukcje using:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
Nasza aplikacja jest teraz gotowa do obsługi uwierzytelniania i usług Identity. Wystarczy, że te funkcje będą widoczne dla użytkowników.
Migrowanie logiki rejestracji i logowania
Po skonfigurowaniu usług Identity dla aplikacji oraz dostępu do danych przy użyciu technologii Entity Framework i programu SQL Server jesteśmy gotowi dodać do aplikacji obsługę rejestracji i logowania.
Usuń komentarz z wiersza @Html.Partial w pliku _Layout.cshtml:
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
Teraz dodaj nowy Razor widok o nazwie _LoginPartial do folderu Views/Shared :
Zaktualizuj _LoginPartial.cshtml za pomocą następującego kodu (zastąp całą jego zawartość):
@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>
}
Na tym etapie powinno być możliwe odświeżenie witryny w przeglądarce.
Podsumowanie
ASP.NET Core wprowadza zmiany w funkcjach ASP.NET Identity . W tym artykule przedstawiono sposób migrowania funkcji uwierzytelniania i zarządzania użytkownikami ASP.NET Identity do ASP.NET Core.