ASP.NET Core: Authentifizierung um Felder erweitern

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

ASP.NET Core: Authentifizierung um Felder erweitern

Die Authentifizierung spielt eine wichtige Rolle bei der Programmierung von Webanwendungen, deren Inhalte nicht ausschließlich der Allgemeinheit zur Verfügung stehen sollen. Dabei kann es vorkommen, dass es nicht ausreicht, die E-Mail-Adresse und das Kennwort eines Benutzers zu speichern. Manchmal möchte man es vielleicht persönlicher gestalten und den Benutzer direkt ansprechen. Um bei der Registrierung die notwendigen Daten zu speichern, sind auch bei der ansonsten perfekt funktionierenden Registrierung von ASP NET Core noch einige Erweiterungen durchzuführen.

Voraussetzungen: Ausgangspunkt für die in diesem Artikel beschriebenen Erweiterungen ist eine Webanwendung auf Basis von ASP.NET Core 2.1 mit Authentifizierungsfunktionen. Wie Sie eine Anwendung direkt bei der Erstellung mit der Authentifizierungsbibliothek ausstatten, erfahren Sie im Artikel Authentifizierung unter ASP.NET Core. Wie Sie eine vorhandene Anwendung mit den Authentifizierungsfunktionen nachrüsten, lesen Sie unter dem Titel ASP.NET Core: Authentifizierung nachrüsten. In beiden Fällen nutzen Sie gegebenenfalls die in der Bibliothek Microsoft.AspNetCore.Identity.Entity­FrameworkCore enthaltenen Funktionen. Da wir im vorliegenden Artikel die Benutzeroberfläche sowie den dahinter steckenden Code anpassen wollen, müssen Sie die in der Bibliothek enthaltenen Dateien gegebenenfalls überschreiben. Wie das gelingt, lesen Sie im Artikel ASP.NET Core: Authentifizierungsseiten anpassen nach. Wir bauen im vorliegenden Artikel auf der Beispiellösung dieses Artikels auf.

Aktueller Stand

Im Standardzustand der Authentifizierung für ASP.NET Core-Webanwendungen sieht der bereits mit deutschen Texten versehene Registrierungsdialog wie in Bild 1 aus.

Dialog zum Anlegen eines Kontos vor dem Hinzufügen von Erweiterungen

Bild 1: Dialog zum Anlegen eines Kontos vor dem Hinzufügen von Erweiterungen

Wenn wir einen Blick in die Tabelle werfen, welche nach der Registrierung die daten des neuen Benutzers aufnehmen sollen, finden wir dort auch keine weiteren Felder, die man mit zusätzlichen Daten füllen könnte. Diese Tabelle finden Sie vor, wenn Sie Ansicht|SQL Server-Objekt-Explorer den entsprechenden Explorer einblenden und dort zur Tabelle AspNetUsers der passenden Datenbank navigieren und diesen Eintrag doppelt anklicken (siehe Bild 2).

Datenmodell der Tabelle zum Speichern der Benutzerdaten

Bild 2: Datenmodell der Tabelle zum Speichern der Benutzerdaten

Es gibt also zumindest schon einmal zwei Stellen, an denen wir Hand anlegen müssen, wenn wir beim Registrieren eines neuen Benutzers mehr als nur die E-Mail-Adresse und das Kennwort (in verschlüsselter Form) speichern sollen.

Es gibt allerdings noch weitere Stellen – zum Beispiel das Model für den Benutzer in Form der Klasse ApplicationUser im Ordner Data sowie die passenden Elemente in der Code behind-Datei der Klasse Register.cshtml.

Schließlich wollen wir dem Benutzer auch noch die Möglichkeit geben, die bei der Registrierung angegebenen Daten zu aktualisieren, weshalb wir auch noch die Datei Manage|Index.cshtml erweitern müssen.

Schritt 1: Model anpassen

Damit wir bei den folgenden Schritten, also etwa beim Erweitern der Benutzeroberfläche, per IntelliSense auf die neuen Elemente zugreifen können, beginnen wir beim Model mit den Änderungen. Die dort verwendete Klasse ApplicationUser erbt von der Klasse IdentityUser und benötigte bisher noch keine eigenen Felder, da diese alle in IdentityUser steckten. Nun fügen wir die drei Felder FirstName, LastName und BirthDatehinzu:

Schritt 2: Vom Model zur Datenbank

Diese wollen wir nun zunächst auch in die Datenbank übertragen. Dazu benötigen wir die Paket-Manager-Konsole, die Sie, falls noch nicht sichtbar, über den Menübefehl Extras|NuGet-Paket-Manager|Paket-Manager-Konsole aktivieren. Wenn Sie noch keine Datenbank auf Basis der Klassen ApplicationDbContext.cs und ApplicationUser.cs erstellt haben, sind noch ein paar vorbereitende Schritte nötig. Der erste ist das Anpassen/Einfügen der Verbindungszeichenfolge in der Datei appsettings.json:

   "ConnectionStrings": {
     "DefaultConnection": "Server=(localdb)mssqllocaldb;Database=AuthAnpassen;Trusted_Connection=True;                                                                                            MultipleActiveResultSets=true"
   }, ...

Dann erstellen Sie die Datenbank mit den folgenden beiden Anweisungen:

Add-Migration Init
Update-Database

Hinweis: Wenn Sie die Datenbank erst jetzt erstellen, müssen Sie die folgenden Schritte nicht mehr ausführen, denn die Felder FirstName, LastName und Birthday wurden nun schon hinzugefügt. Wenn die Datenbank hingegen schon vorhanden ist, sind die folgenden beiden Anweisungen noch notwendig.

Zum Aktualisieren der Datenbank setzen Sie die folgenden zwei Befehle ab. Der erste fügt eine neue Klasse mit den für die Migration der Elemente in die Datenbank notwendigen Befehlen zum Projekt hinzu und nennt diese Klasse AddFieldsAspNetUsers:

Add-Migration AddFieldsAspNetUsers

Die Klasse hat den folgenden Code:

Sie löscht also eventuell vorhandene Felder namens BirthDate, FirstName und LastName und erstellt diese unter den angegebenen Datentypen erneut. Dabei verwendet sie die DropColumn- beziehungsweise AddColumn-Felder des MigrationBuilder-Objekts. Nun rufen wir in der Paket-Manager-Konsole die folgende Anweisung auf:

Update-Database

Dies durchläuft die im Verzeichnis Migrations enthaltenen Klassen und führt diese aus. Dadurch landen nun auch die drei neuen Felder für die Klasse ApplicationUser.cs in der Tabelle AspNetUsers – siehe Bild 3.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]