{"id":55000143,"date":"2018-08-01T00:00:00","date_gmt":"2020-03-27T19:33:33","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=143"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Authentifizierung_um_Felder_erweitern","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Authentifizierung_um_Felder_erweitern\/","title":{"rendered":"Authentifizierung um Felder erweitern"},"content":{"rendered":"<p><b>Die Authentifizierung spielt eine wichtige Rolle bei der Programmierung von Webanwendungen, deren Inhalte nicht ausschlie&szlig;lich der Allgemeinheit zur Verf&uuml;gung stehen sollen. Dabei kann es vorkommen, dass es nicht ausreicht, die E-Mail-Adresse und das Kennwort eines Benutzers zu speichern. Manchmal m&ouml;chte man es vielleicht pers&ouml;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&uuml;hren.<\/b><\/p>\n<p><b>Voraussetzungen: <\/b>Ausgangspunkt f&uuml;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 <b>Authentifizierung unter ASP.NET Core<\/b>. Wie Sie eine vorhandene Anwendung mit den Authentifizierungsfunktionen nachr&uuml;sten, lesen Sie unter dem Titel <b>ASP.NET Core: Authentifizierung nachr&uuml;sten<\/b>. In beiden F&auml;llen nutzen Sie gegebenenfalls die in der Bibliothek <b>Microsoft.AspNetCore.Identity.Entity-FrameworkCore <\/b>enthaltenen Funktionen. Da wir im vorliegenden Artikel die Benutzeroberfl&auml;che sowie den dahinter steckenden Code anpassen wollen, m&uuml;ssen Sie die in der Bibliothek enthaltenen Dateien gegebenenfalls &uuml;berschreiben. Wie das gelingt, lesen Sie im Artikel <b>ASP.NET Core: Authentifizierungsseiten anpassen <\/b>nach. Wir bauen im vorliegenden Artikel auf der Beispiell&ouml;sung dieses Artikels auf.<\/p>\n<h2>Aktueller Stand<\/h2>\n<p>Im Standardzustand der Authentifizierung f&uuml;r ASP.NET Core-Webanwendungen sieht der bereits mit deutschen Texten versehene Registrierungsdialog wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_143_002.png\" alt=\"Dialog zum Anlegen eines Kontos vor dem Hinzuf&uuml;gen von Erweiterungen\" width=\"549,6265\" height=\"409,267\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Dialog zum Anlegen eines Kontos vor dem Hinzuf&uuml;gen von Erweiterungen<\/span><\/b><\/p>\n<p>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&auml;tzlichen Daten f&uuml;llen k&ouml;nnte. Diese Tabelle finden Sie vor, wenn Sie <b>Ansicht|SQL Server-Objekt-Explorer <\/b>den entsprechenden Explorer einblenden und dort zur Tabelle <b>AspNetUsers<\/b> der passenden Datenbank navigieren und diesen Eintrag doppelt anklicken (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_143_001.png\" alt=\"Datenmodell der Tabelle zum Speichern der Benutzerdaten\" width=\"649,559\" height=\"387,5254\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenmodell der Tabelle zum Speichern der Benutzerdaten<\/span><\/b><\/p>\n<p>Es gibt also zumindest schon einmal zwei Stellen, an denen wir Hand anlegen m&uuml;ssen, wenn wir beim Registrieren eines neuen Benutzers mehr als nur die E-Mail-Adresse und das Kennwort (in verschl&uuml;sselter Form) speichern sollen.<\/p>\n<p>Es gibt allerdings noch weitere Stellen &#8211; zum Beispiel das Model f&uuml;r den Benutzer in Form der Klasse <b>ApplicationUser <\/b>im Ordner <b>Data <\/b>sowie die passenden Elemente in der Code behind-Datei der Klasse <b>Register.cshtml<\/b>.<\/p>\n<p>Schlie&szlig;lich wollen wir dem Benutzer auch noch die M&ouml;glichkeit geben, die bei der Registrierung angegebenen Daten zu aktualisieren, weshalb wir auch noch die Datei <b>Manage|Index.cshtml <\/b>erweitern m&uuml;ssen.<\/p>\n<h2>Schritt 1: Model anpassen<\/h2>\n<p>Damit wir bei den folgenden Schritten, also etwa beim Erweitern der Benutzeroberfl&auml;che, per IntelliSense auf die neuen Elemente zugreifen k&ouml;nnen, beginnen wir beim Model mit den &Auml;nderungen. Die dort verwendete Klasse <b>ApplicationUser <\/b>erbt von der Klasse <b>IdentityUser <\/b>und ben&ouml;tigte bisher noch keine eigenen Felder, da diese alle in <b>IdentityUser <\/b>steckten. Nun f&uuml;gen wir die drei Felder <b>FirstName<\/b>, <b>LastName <\/b>und <b>BirthDate<\/b>hinzu:<\/p>\n<h2>Schritt 2: Vom Model zur Datenbank<\/h2>\n<p>Diese wollen wir nun zun&auml;chst auch in die Datenbank &uuml;bertragen. Dazu ben&ouml;tigen wir die Paket-Manager-Konsole, die Sie, falls noch nicht sichtbar, &uuml;ber den Men&uuml;befehl <b>Extras|NuGet-Paket-Manager|Paket-Manager-Konsole <\/b>aktivieren. Wenn Sie noch keine Datenbank auf Basis der Klassen <b>ApplicationDbContext.cs <\/b>und <b>ApplicationUser.cs <\/b>erstellt haben, sind noch ein paar vorbereitende Schritte n&ouml;tig. Der erste ist das Anpassen\/Einf&uuml;gen der Verbindungszeichenfolge in der Datei <b>appsettings.json<\/b>:<\/p>\n<pre>   \"ConnectionStrings\": {\r\n     \"DefaultConnection\": \"Server=(localdb)<\/font>mssqllocaldb;Database=AuthAnpassen;Trusted_Connection=True;                                                                                            MultipleActiveResultSets=true\"\r\n   }, ...<\/pre>\n<p>Dann erstellen Sie die Datenbank mit den folgenden beiden Anweisungen:<\/p>\n<pre>Add-Migration Init\r\nUpdate-Database<\/pre>\n<p><b>Hinweis: <\/b>Wenn Sie die Datenbank erst jetzt erstellen, m&uuml;ssen Sie die folgenden Schritte nicht mehr ausf&uuml;hren, denn die Felder <b>FirstName<\/b>, <b>LastName <\/b>und <b>Birthday <\/b>wurden nun schon hinzugef&uuml;gt. Wenn die Datenbank hingegen schon vorhanden ist, sind die folgenden beiden Anweisungen noch notwendig.<\/p>\n<p>Zum Aktualisieren der Datenbank setzen Sie die folgenden zwei Befehle ab. Der erste f&uuml;gt eine neue Klasse mit den f&uuml;r die Migration der Elemente in die Datenbank notwendigen Befehlen zum Projekt hinzu und nennt diese Klasse <b>AddFieldsAspNetUsers<\/b>:<\/p>\n<pre>Add-Migration AddFieldsAspNetUsers<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000143\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000143?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000143\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Authentifizierung spielt eine wichtige Rolle bei der Programmierung von Webanwendungen, deren Inhalte nicht ausschlie&szlig;lich der Allgemeinheit zur Verf&uuml;gung stehen sollen. Dabei kann es vorkommen, dass es nicht ausreicht, die E-Mail-Adresse und das Kennwort eines Benutzers zu speichern. Manchmal m&ouml;chte man es vielleicht pers&ouml;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&uuml;hren.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662018,66042018,44000018],"tags":[],"yst_prominent_words":[],"class_list":["post-55000143","post","type-post","status-publish","format-standard","hentry","category-662018","category-66042018","category-ASPNET_Core"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000143"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000143\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000143"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}