Ich erstelle meine eigene Website und meinen eigenen Blog und ich möchte zunächst nur mich in der Datenbank (mein Name und Passwort) haben und vielleicht später einige Registrierungen für andere, aber zuerst nur für mich und die Verwaltung mit Autorisierung. Ich möchte die Mitgliedschaft von MS nicht nutzen. Ich möchte versuchen, meine eigene von Grund auf zu erstellen, also suche ich nach Anleitungen für Anfänger, aber ich habe nur große Anleitungen mit Rollen und Rechten gefunden. Ich möchte nur ein kleines Beispiel mit der Überprüfung von Benutzername und Passwort in der Datenbank mit Anmeldeinformationen. Danke für die Hilfe. Libor
Antworten
Zu viele Anzeigen?Auch wenn Sie den Datenspeicher des Mitgliedschafts- und Rollenanbieters nicht verwenden möchten, können Sie die Authentifizierung dennoch nutzen. Glauben Sie mir, es ist viel einfacher als Ihr eigenes aufzubauen. So funktioniert es:
Wir gehen davon aus, dass Sie bereits Ihren Benutzerspeicher eingerichtet haben, um den Benutzernamen und das Passwort abzurufen. Zur Vereinfachung tue ich so, als hätten Sie eine statische Klasse namens DataLayer, die Ihre Datenabrufmethoden enthält, um Informationen aus der Datenbank (oder einem anderen von Ihnen verwendeten Speicher) abzurufen.
Zunächst benötigen Sie eine Möglichkeit, damit der Benutzer sich anmelden kann. Richten Sie eine Seite mit Benutzernamen- und Passwortfeldern ein. Dann richten Sie in der Aktionmethode, an die die Seite gesendet wird, ein schnelles if-Statement ein:
if (DataLayer.UserExists(userModel.Username))
{
User userFromDB = DataLayer.GetUser(userModel.Username);
if (userFromDB.Password == userModel.Password)
{
FormsAuthentication.SetAuthCookie(userFromDB.Username, checkBoxRememberMe.Checked);
//Verwenden Sie userFromDB als Benutzernamen zur Authentifizierung, da es
//die Großschreibung ihres Benutzernamens so beibehält, wie sie ihn
//in die Datenbank eingegeben haben; auf diese Weise wird, wenn sie sich als "Bob" angemeldet haben, aber "bob" in das Anmeldefeld eingeben, sie dennoch als "Bob" authentifiziert, so dass ihre Kommentare auf Ihren Blogs ihren Namen so anzeigen, wie sie es beabsichtigt haben.
return "Erfolgreich angemeldet!";
}
}
return "Ungültiger Benutzername oder ungültiges Passwort.";
Nun, da sie authentifiziert sind, können Sie einfach Page.User.Identity.IsAuthenticated in Ihrem Code verwenden, um herauszufinden, ob sie angemeldet sind. So:
if (User.Identity.IsAuthenticated)
{
DataLayer.PostBlogComment(User.Identity.Name, commentBody);
//Dann in Ihrem Controller, der Blogkommentare rendert, würden Sie offensichtlich
//eine Logik haben, um den Benutzer aus dem Speicher nach dem Benutzernamen zu erhalten, dann ihr Avatar und alle anderen nützlichen Informationen abrufen, um sie neben dem Blogbeitrag anzuzeigen. Dies ist nur ein Beispiel.
}
Darüber hinaus können Sie gesamte Aktionmethoden oder sogar ganze Controller für Benutzer sperren, die über den Formauthentifizierungsanbieter authentifiziert sind. Alles was Sie tun müssen, ist Tags wie diese zu Ihren Aktionmethoden/Controllern hinzuzufügen:
[Authorize]
public ActionResult EinigeAktionMethode()
{
return View();
}
Das [Authorize]
-Attribut hindert Benutzer, die nicht angemeldet sind, daran, auf diese Aktionmethode zuzugreifen und leitet sie auf Ihre Anmeldeseite um. Sie können dieses Attribut auch verwenden, um Rollen zu filtern, wenn Sie den integrierten Rollenanbieter verwenden.
[Authorize(Roles="Admin, SalesReps")]
public ActionResult EinigeAktionMethode()
{
return View();
}
Diese Attribute können auch über der Controllerklasse hinzugefügt werden, um ihre Logik auf den gesamten Controller anzuwenden.
EDIT: Um einen Benutzer abzumelden, rufen Sie einfach FormsAuthentication.SignOut();
auf.
Hallo @Bibo, gut dass du dich nicht für die Membership-Anbieter entschieden hast. Ich denke, ein UserService oder ähnliches, das Methoden zum Erstellen, Authentifizieren von Benutzern und einige weitere Methoden bereitstellt, sollte ausreichen. Als Vorschlag, verwenden Sie Passworthashing und einen Passwortsalz für das Passwort des Benutzers. Hier ist ein guter Link, den du dir ansehen kannst. Schau dir auch diese Antwort an, die ich vor einiger Zeit gegeben habe.
Viel Glück!
EDIT: Der rememberMe-Parameter sollte stattdessen keepMeSignedIn genannt werden.