Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door Rick Anderson
Blazor Identity steiger
ASP.NET Core-scaffolding Identity voegt ASP.NET Core Identity toe aan Blazor Web Apps en Blazor Server apps. Nadat de scaffolder de IdentityRazor onderdelen aan de app heeft toegevoegd, kunt u de onderdelen aanpassen aan de vereisten van uw app.
Hoewel de scaffolder de benodigde C#-code genereert om Identity in de app te scaffolden, moet u de database van het project bijwerken met een Entity Framework (EF) Core-databasemigratie om het proces te voltooien. In dit artikel worden de stappen uitgelegd die nodig zijn voor het migreren van een database.
Controleer de wijzigingen na het uitvoeren van de Identity scaffolder. We raden u aan GitHub of een ander broncodebeheersysteem te gebruiken waarin bestandswijzigingen worden weergegeven met een functie voor het terugdraaien van wijzigingen.
Services zijn vereist wanneer u tweeledige verificatie (2FA) gebruikt, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd.
Razor Pagina's en MVC-scaffolding Identity
ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Aangepaste Identity code overschrijft de standaard implementatie die wordt geleverd door de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.
Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.
Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.
We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.
Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.
Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.
Scaffold Identity naar een Blazor project
Deze sectie is van toepassing op Blazor Web Apps en Blazor Server apps.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Blazor Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- In het dialoogvenster Toevoegen BlazorIdentity :
- Selecteer of voeg toe met de plusknop (+) de DbContext class (databasecontextklasse).
- Selecteer de databaseprovider (databaseprovider), die standaard sql Server is.
- Selecteer de gebruikersklasse (+) of voeg deze toe met de plusknop ().
- Selecteer de knop Toevoegen.
Voor de gegenereerde Identity databasecode zijn migraties vereistEF Core. In de volgende stappen wordt uitgelegd hoe u een migratie maakt en toepast op de database.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Apps aan de clientzijde Blazor (zelfstandig Blazor WebAssembly)
Apps aan de clientzijde Blazor (zelfstandig Blazor WebAssembly) gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken.
Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.
Scaffold Identity in een Razor project zonder bestaande autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Migraties, UseAuthentication en indeling
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Layoutwijzigingen
Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Configureer Identity in een Razor project met toestemming
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Scaffold Identity in een MVC-project zonder bestaande autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Toevoegen MapRazorPages aan Program.cs zoals wordt weergegeven in de volgende gemarkeerde code:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Scaffold Identity in een MVC-project met autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Volledige UI-bron Identity maken
Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.
Wachtwoordconfiguratie
Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's.
InputModel
Password de eigenschappen zijn te vinden in de volgende bestanden:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Een pagina uitschakelen
In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.
Gebruikersregistratie uitschakelen:
Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Werk
Areas/Identity/Pages/Account/Register.cshtml.csbij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Update
Areas/Identity/Pages/Account/Register.cshtmlom consistent te zijn met de voorgaande wijzigingen:@page @model RegisterModel @{ ViewData["Title"] = "Go to Login"; } <h1>@ViewData["Title"]</h1> <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a> </li>Commentaar toevoegen aan of verwijderen van de registratiekoppeling
Areas/Identity/Pages/Account/Login.cshtml@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Werk de
Areas/Identity/Pages/Account/RegisterConfirmationpagina bij.- Verwijder de code en koppelingen uit het cshtml-bestand.
- Verwijder de bevestigingscode uit de
PageModel.
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Een andere app gebruiken om gebruikers toe te voegen
Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:
- Een toegewezen beheerweb-app.
- Een console-app.
In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:
- Een lijst met gebruikers wordt in het geheugen gelezen.
- Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
- De gebruiker wordt toegevoegd aan de Identity database.
- De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<AppDbCntx>();
context.Database.Migrate();
var config = host.Services.GetRequiredService<IConfiguration>();
var userList = config.GetSection("userList").Get<List<string>>();
SeedData.Initialize(services, userList).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred adding users.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
De volgende code geeft een overzicht van het toevoegen van een gebruiker:
public static async Task Initialize(IServiceProvider serviceProvider,
List<string> userList)
{
var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();
foreach (var userName in userList)
{
var userPassword = GenerateSecurePassword();
var userId = await EnsureUser(userManager, userName, userPassword);
NotifyUser(userName, userPassword);
}
}
private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
string userName, string userPassword)
{
var user = await userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser(userName)
{
EmailConfirmed = true
};
await userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.
Publicatie van statische Identity assets voorkomen
Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.
ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Gegenereerde code heeft voorrang op dezelfde code in de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.
Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.
Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.
We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.
Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.
Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.
Scaffold Identity in een Razor project zonder bestaande autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Migraties, UseAuthentication en indeling
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Layoutwijzigingen
Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Configureer Identity in een Razor project met toestemming
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Scaffold Identity in een MVC-project zonder bestaande autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Toevoegen MapRazorPages aan Program.cs zoals wordt weergegeven in de volgende gemarkeerde code:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Scaffold Identity in een MVC-project met autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Scaffold Identity voor een server-side Blazor app met autorisatie
Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.
Opmerking
Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Migraties
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Verificatie-API-eindpunten voor style
Omdat apps aan de serverzijde Blazor gebruikmaken van Razor Pages Identity pagina's, verandert de stijl van de gebruikersinterface wanneer een bezoeker tussen Identity pagina's en onderdelen navigeert. U hebt twee opties om de inconsistente stijlen aan te pakken:
Aangepaste Identity onderdelen
ASP.NET Core Identity is ontworpen om te werken in de context van HTTP-aanvraag- en antwoordcommunicatie. Dit is niet het primaire communicatiemodel van de client-server in Blazor apps. ASP.NET Core-apps die gebruikmaken van ASP.NET Core Identity voor gebruikersbeheer, moeten Razor Pagina's gebruiken in plaats van Razor onderdelen voor Identity-gerelateerde gebruikersinterface, zoals gebruikersregistratie, aanmelding, afmelding en andere taken voor gebruikersbeheer.
Omdat SignInManager<TUser> en UserManager<TUser> niet worden ondersteund in Razor componenten, raden we aan om een web-API te gebruiken om Identity acties vanuit Razor componenten te beheren via een server-side Identity-enabled ASP.NET Core-app. Zie Blazorvoor hulp bij het maken van web-API's voor Blazor apps.
Een manier om Razor-onderdelen te gebruiken voor Identity in plaats van Razor-pagina's is door je eigen aangepaste IdentityRazor-onderdelen te ontwikkelen, maar Microsoft raadt deze benadering niet aan en ondersteunt deze niet. Bekijk de volgende discussies voor aanvullende context. In de volgende discussies worden codevoorbeelden in opmerkingen en codevoorbeelden die kruislings zijn gekoppeld in niet-Microsoft GitHub-opslagplaatsen niet door Microsoft ondersteund, maar kunnen mogelijk nuttig zijn voor sommige ontwikkelaars.
- Ondersteuning voor aangepast aanmeldingsonderdeel bij gebruik Identity (dotnet/aspnetcore #13601)
-
SigninManager<T> - Er is geen informatie over het daadwerkelijk implementeren van een aangepast aanmeldingsformulier voor blazor aan de serverzijde (dotnet/AspNetCore.Docs #16813)
Voor aanvullende hulp bij het bouwen van aangepaste IdentityRazor onderdelen of het zoeken naar onderdelen van Razor derden raden we de volgende bronnen aan:
-
Stack Overflow (tag:
blazor) (forum voor openbare ondersteuning) - ASP.NET Core Slack-team (openbare ondersteuningschat)
- Blazor Gitter (openbare ondersteuningschat)
- Ontzagwekkend Blazor (Koppelingen naar resources die door de community worden onderhouden Blazor )
Een aangepaste indeling gebruiken met Blazor app-stijlen
De Identity pagina-indeling en -stijlen kunnen worden aangepast om pagina's te produceren die gebruikmaken van stijlen die vergelijkbaar zijn met het standaardthema Blazor . Deze benadering wordt niet gedekt door de documentatie.
Blazor-apps aan de clientzijde
Apps aan de clientzijde Blazor gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken. Server-side ASP.NET Core-apps van gehoste Blazor oplossingen kunnen de Pages/MVC-richtlijnen in dit artikel volgen en zijn geconfigureerd net als elk ander type ASP.NET Core-app die Razor ondersteunt.
Het Blazor framework bevat Razor geen onderdeelversies van Identity UI-pagina's. Identity UI-onderdelen Razor kunnen aangepast worden gebouwd of verkregen uit niet-ondersteunde bronnen van derden.
Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.
Volledige UI-bron Identity maken
Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.
Wachtwoordconfiguratie
Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's.
InputModel
Password de eigenschappen zijn te vinden in de volgende bestanden:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Een pagina uitschakelen
In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.
Gebruikersregistratie uitschakelen:
Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Werk
Areas/Identity/Pages/Account/Register.cshtml.csbij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Update
Areas/Identity/Pages/Account/Register.cshtmlom consistent te zijn met de voorgaande wijzigingen:@page @model RegisterModel @{ ViewData["Title"] = "Go to Login"; } <h1>@ViewData["Title"]</h1> <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a> </li>Commentaar toevoegen aan of verwijderen van de registratiekoppeling
Areas/Identity/Pages/Account/Login.cshtml@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Werk de
Areas/Identity/Pages/Account/RegisterConfirmationpagina bij.- Verwijder de code en koppelingen uit het cshtml-bestand.
- Verwijder de bevestigingscode uit de
PageModel.
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Een andere app gebruiken om gebruikers toe te voegen
Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:
- Een toegewezen beheerweb-app.
- Een console-app.
In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:
- Een lijst met gebruikers wordt in het geheugen gelezen.
- Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
- De gebruiker wordt toegevoegd aan de Identity database.
- De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<AppDbCntx>();
context.Database.Migrate();
var config = host.Services.GetRequiredService<IConfiguration>();
var userList = config.GetSection("userList").Get<List<string>>();
SeedData.Initialize(services, userList).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred adding users.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
De volgende code geeft een overzicht van het toevoegen van een gebruiker:
public static async Task Initialize(IServiceProvider serviceProvider,
List<string> userList)
{
var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();
foreach (var userName in userList)
{
var userPassword = GenerateSecurePassword();
var userId = await EnsureUser(userManager, userName, userPassword);
NotifyUser(userName, userPassword);
}
}
private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
string userName, string userPassword)
{
var user = await userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser(userName)
{
EmailConfirmed = true
};
await userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.
Publicatie van statische Identity assets voorkomen
Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.
ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Gegenereerde code heeft voorrang op dezelfde code in de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.
Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.
Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.
We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.
Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.
Wanneer u een nieuwe gegevenscontext voor Identity in een project met bestaande accounts plaatst, opent u Startup.ConfigureServices en verwijdert u de aanroepen naar:
AddDbContextAddDefaultIdentity
In de volgende code worden bijvoorbeeld AddDbContext en AddDefaultIdentity uitgeschakeld.
public void ConfigureServices(IServiceCollection services)
{
//services.AddDbContext<ApplicationDbContext>(options =>
// options.UseSqlServer(
// Configuration.GetConnectionString("DefaultConnection")));
//services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
// .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
}
In de voorgaande code wordt de code aangegeven die wordt gedupliceerd in Areas/Identity/IdentityHostingStartup.cs
Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.
Scaffold Identity in een leeg project
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Scaffold Identity in een Razor project zonder bestaande autorisatie
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.
Migraties, UseAuthentication en indeling
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Authenticatie inschakelen
Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.
Layoutwijzigingen
Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRP</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
Configureer Identity in een Razor project met toestemming
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Sommige Identity opties zijn geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.
Scaffold Identity in een MVC-project zonder bestaande autorisatie
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRP</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
Verplaats het Pages/Shared/_LoginPartial.cshtml bestand naar Views/Shared/_LoginPartial.cshtml.
Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.
Scaffold Identity in een MVC-project met autorisatie
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Scaffold Identity naar een server-side Blazor app zonder bestaande autorisatie
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.
Migraties
Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.
Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.
Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.
Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:
Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .
Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.
Selecteer de knop Sluiten nadat de bewerking is voltooid.
U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.
Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:
Get-Migration
Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.
Verificatie-API-eindpunten voor style
Omdat apps aan de serverzijde Blazor gebruikmaken van Razor Pages Identity pagina's, verandert de stijl van de gebruikersinterface wanneer een bezoeker tussen Identity pagina's en onderdelen navigeert. U hebt twee opties om de inconsistente stijlen aan te pakken:
Aangepaste Identity onderdelen
Een benadering om componenten voor Identity te gebruiken in plaats van pagina's is om Identity componenten te bouwen. Omdat SignInManager en UserManager niet worden ondersteund in Razor onderdelen, gebruikt u web-API-eindpunten in de Blazor app om acties van gebruikersaccounts te verwerken.
Een aangepaste indeling gebruiken met Blazor app-stijlen
De Identity pagina-indeling en -stijlen kunnen worden aangepast om pagina's te produceren die gebruikmaken van stijlen die vergelijkbaar zijn met het standaardthema Blazor . Deze benadering wordt niet gedekt door de documentatie.
Scaffold Identity voor een server-side Blazor app met autorisatie
Voer de Identity scaffolder uit:
- Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
- In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
- Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:-
Pages/Shared/_Layout.cshtmlvoor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur. -
Views/Shared/_Layout.cshtmlvoor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
-
- Voor de gegevenscontext (DbContext-klasse):
- Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
- Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld
Contoso.Data.ApplicationDbContextvoor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met deContosoUsernaam Contoso).
- Selecteer de knop Toevoegen om de scaffolder uit te voeren.
- Als u een bestaande, aangepaste indelingspagina voor Identity (
Sommige Identity opties zijn geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.
Blazor-apps aan de clientzijde
Apps aan de clientzijde Blazor gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken. Server-side ASP.NET Core-apps van gehoste Blazor oplossingen kunnen de Pages/MVC-richtlijnen in dit artikel volgen en zijn geconfigureerd net als elk ander type ASP.NET Core-app die Razor ondersteunt.
Het Blazor framework bevat Razor geen onderdeelversies van Identity UI-pagina's. Identity UI-onderdelen Razor kunnen aangepast worden gebouwd of verkregen uit niet-ondersteunde bronnen van derden.
Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.
Volledige UI-bron Identity maken
Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.
De volgende gemarkeerde code toont de wijzigingen voor het vervangen van de standaardgebruikersinterface IdentityIdentity in een ASP.NET Core 2.1-web-app. Mogelijk wilt u dit doen om volledige controle over de Identity gebruikersinterface te hebben.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
}
De standaardwaarde Identity wordt vervangen in de volgende code:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
De volgende code stelt de LoginPath, LogoutPath, en AccessDeniedPath in:
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
Registreer een IEmailSender implementatie, bijvoorbeeld:
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string message)
{
return Task.CompletedTask;
}
}
Wachtwoordconfiguratie
Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's.
InputModel
Password de eigenschappen zijn te vinden in de volgende bestanden:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Een pagina uitschakelen
In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.
Gebruikersregistratie uitschakelen:
Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Werk
Areas/Identity/Pages/Account/Register.cshtml.csbij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Update
Areas/Identity/Pages/Account/Register.cshtmlom consistent te zijn met de voorgaande wijzigingen:@page @model RegisterModel @{ ViewData["Title"] = "Go to Login"; } <h1>@ViewData["Title"]</h1> <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a> </li>Commentaar toevoegen aan of verwijderen van de registratiekoppeling
Areas/Identity/Pages/Account/Login.cshtml@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Werk de
Areas/Identity/Pages/Account/RegisterConfirmationpagina bij.- Verwijder de code en koppelingen uit het cshtml-bestand.
- Verwijder de bevestigingscode uit de
PageModel.
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Een andere app gebruiken om gebruikers toe te voegen
Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:
- Een toegewezen beheerweb-app.
- Een console-app.
In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:
- Een lijst met gebruikers wordt in het geheugen gelezen.
- Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
- De gebruiker wordt toegevoegd aan de Identity database.
- De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<AppDbCntx>();
context.Database.Migrate();
var config = host.Services.GetRequiredService<IConfiguration>();
var userList = config.GetSection("userList").Get<List<string>>();
SeedData.Initialize(services, userList).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred adding users.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
De volgende code geeft een overzicht van het toevoegen van een gebruiker:
public static async Task Initialize(IServiceProvider serviceProvider,
List<string> userList)
{
var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();
foreach (var userName in userList)
{
var userPassword = GenerateSecurePassword();
var userId = await EnsureUser(userManager, userName, userPassword);
NotifyUser(userName, userPassword);
}
}
private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
string userName, string userPassword)
{
var user = await userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser(userName)
{
EmailConfirmed = true
};
await userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.
Publicatie van statische Identity assets voorkomen
Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.