0

Ich versuche, ein Element zur Identität des Benutzers hinzuzufügen, aber ich denke, das könnte auch anders gemacht werden.Hinzufügen einer benutzerdefinierten Eigenschaft zu ASP.NET MVC Identity nach Benutzeranmeldung

Ich habe ein paar benutzerdefinierte Felder zur Benutzeridentität hinzugefügt, aber was ich versuche zu tun ist, sobald der Benutzer erfolgreich angemeldet ist, überprüfe ich, ob sie mehreren Filialen zugeordnet sind (Store Locations) und dann eine Liste anbieten Damit kann der Benutzer auswählen, für welche Zweigstellen Daten angezeigt werden sollen.

Ich habe dies erfolgreich gemacht, aber jetzt möchte ich jede der Filialen in der Benutzer-Sitzung/Cookie/Identität (nicht sicher, welche Terminologie zu verwenden) speichern. Der Benutzer wird eine Reihe von Kontrollkästchen angezeigt, und nachdem er auf Speichern geklickt hat, bin ich nicht sicher, was zu tun ist.

Ich brauche es in dieser Funktion zu speichern:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult SelectBranch(params string[] branchNames) 
     { 

      foreach (var branch in branchNames) 
      { 
       //add branch to session/cookie/identity 

      } 

      return RedirectToAction("Index"); 
     } 

Welche Schritte das ich ergreifen müssen, um in der Lage sein, zu tun?

+0

Warum möchten Sie es in der Sitzung speichern? Warum nicht abfragen (aus einer Tabelle/zwischengespeicherten Daten) mit der UsreId, die Sie in Sitzung/Cookie haben? – Shyju

+0

Ich frage die Zweige aus einer Tabelle, die der Benutzer ihnen zugewiesen hat, aber der Benutzer wird jedes Mal verschiedene Zweige verwenden. Ich muss dann Daten basierend darauf abfragen, welche Zweige ausgewählt wurden. Ich möchte es aus einigen zwischengespeicherten Daten mit der UserID abfragen, wie kann ich das tun? Speichern Sie es in zwischengespeicherten Daten, Session/Cookie? –

Antwort

1

Es hängt davon ab, was Sie Ziele beenden sind. Sollte die Wahl der Zweige dauerhaft oder vorübergehend sein? Basierend auf Ihrem Kommentar klingt es so, als ob Sie es für die aktuelle Sitzung speichern möchten, aber lassen Sie den Benutzer dann beim nächsten Mal wieder wählen. Wenn es das ist, was Sie wirklich brauchen, ist es in Ordnung, aber mir scheint, dass etwas wie dieses entweder dauerhaft gespeichert werden sollte, mit der Fähigkeit für den Benutzer, diese Entscheidungen zu aktualisieren, wenn sie es für richtig halten, oder für die aktuelle Anfrage, wie das Filtern einer Menge von Ergebnissen durch eine Verzweigung oder Verzweigungen.

Speichern nur für die aktuelle Browsersitzung wirft die Frage auf, ob der Benutzer erkennt, dass ihre Auswahl über zusätzliche Ansichten beibehalten wird, und umgekehrt, ob sie verstehen, warum sie jedes Mal wieder Verzweigungen setzen müssen zum Ort.

Das heißt, Ihre Auswahl:

  • Permanent - Store auf Benutzereinheit. Fügen Sie ein M2M zwischen ApplicationUser und (oder was auch immer) hinzu.
  • Transient - Eingestellt in Session.

Technisch können Sie Ansprüche verwenden, aber sie sind nicht wirklich eine gute Lösung dafür. Ansprüche sollten verwendet werden, wenn entweder 1) die gespeicherten Daten nicht für jeden Benutzer anwendbar sind oder 2) die gespeicherten Daten vorübergehender Natur sind, aber die Sitzung überleben sollten. Ein gutes Beispiel für die Verwendung eines Anspruchs wäre das Speichern eines Authentifizierungs-Tokens von etwas wie Facebook.Nicht jeder Benutzer hat notwendigerweise ein Facebook-Authentifizierungs-Token, also ist es nicht etwas, das Sie als Datenbank-Spalte haben möchten, und es gibt im Allgemeinen eine Lebenszeit für dieses Authentifizierungs-Token, was es zwar temporär macht, aber auch wenn Sie die Sitzung beibehalten würden wurde zerstört.

Basierend auf Ihrer Beschreibung dessen, was Sie erreichen möchten, ist Session Ihre beste Wette, aber ich würde stark argumentieren, dass es wahrscheinlich Wert gibt, diese Wahl dauerhaft zu behalten, solange die Verwendung es später ändern kann. Um es in der Sitzung zu speichern, würde ich buchstäblich nur Ihre String-Array direkt in der Sitzung speichern (keine Notwendigkeit für die for-Schleife):

+0

Danke @Chris. Speichern Sie es in der Sitzung ist genau das, was ich brauche und auf die Sitzung zuzugreifen, verwenden Sie Folgendes: string [] sessionBranchNames = (string []) Sitzung ["BranchNames"]; –

1

Ich würde sagen, Sie Identity

behauptet

verwenden Was ist ein Anspruch?

Ein Anspruch ist eine Aussage über den Nutzer über sich selbst macht, kann es Benutzer Name, Vorname, Nachname, Geschlecht, Telefon, die Rollen Benutzer sein zugeordnet, etc ...

Sie können mehr über sie wissen here

Verwandte Themen