Jeff,
Wie ich schon sagte in einem Kommentar zu Ihrer Frage oben, Sie muss die ClaimedIdentifier für den Benutzernamen verwenden - das heißt, den ersten Parameter zu SetAuthCookie. Es gibt einen großen Sicherheitsgrund dafür. Fühlen Sie sich frei, einen Thread auf [email protected] zu starten, wenn Sie mehr über die Gründe erfahren möchten.
Jetzt in Bezug auf Ihre Frage zu einem gesamten Benutzerobjekt ... Wenn Sie das als Cookie senden möchten, müssten Sie Ihr Benutzerobjekt als Zeichenfolge serialisieren, dann müssten Sie es in einigen signieren Möglichkeit zum Schutz vor Manipulation durch den Benutzer. Vielleicht möchten Sie es auch verschlüsseln. Blah, es ist eine Menge Arbeit, und du würdest mit einem großen Cookie enden, der mit jeder Web-Anfrage, die du nicht willst, hin und her geht.
Was ich in meinen Apps mache, um das von Ihnen angegebene Problem zu lösen, ist das Hinzufügen einer statischen Eigenschaft zu meiner Datei Global.asax.cs namens CurrentUser.Wie folgt aus:
public static User CurrentUser {
get {
User user = HttpContext.Current.Items["CurrentUser"] as User;
if (user == null && HttpContext.Current.User.Identity.IsAuthenticated) {
user = Database.LookupUserByClaimedIdentifier(HttpContext.Current.User.Identity.Name);
HttpContext.Current.Items["CurrentUser"] = user;
}
return user;
}
}
Hinweis cachen ich das Ergebnis im HttpContext.Current.Items Wörterbuch, das zu einer HTTP-Anforderung spezifisch ist, und hält der Benutzer zu einem einzigen Treffer herunterzuholen - und holt es nur die Das erste Mal, wenn eine Seite die CurrentUser-Informationen tatsächlich möchte.
So eine Seite leicht Strom in Benutzerinformationen wie dies protokolliert werden können:
User user = Global.CurrentUser;
if (user != null) { // unnecessary check if this is a page that users must be authenticated to access
int age = user.Age; // whatever you need here
}
Was sind Sie mit OpenID anmelden verwenden? Ich habe http://code.google.com/p/dotnetopenid/ in der Vergangenheit mit einigem Erfolg verwendet - ich bin sicher, dass es Beispiele bietet, die zeigen, was Sie hier tun möchten. – Noldorin
Ich benutze ihre ASP.NET MVC-Beispiel, um sich anzumelden. Nur den Kern, dann in ihrer Methode in der case-Anweisung (tis, wo ich gor die Zeile über. Ursprünglich sah dieser Code so aus ... FormsAuthentication.SetAuthCookie (response.ClaimedIdentifier, false); Ich habe die Zeichenfolge einfach durch den Anzeigenamen meines Benutzers ersetzt.Ich möchte einige grundlegende Informationen mit ihr pushen, wie hier, wo sie Ihnen Ihre Punktzahl, Ihre userId, mitteilen (befindet sich im Hyperlink) usw. –
Jeff! NUTZEN SIE DISPLAYNAME NICHT FÜR IHREN NUTZERNAME! Entschuldigung, aber dies ist eine riesige Sicherheitslücke. Sie müssen den ClaimedIdentifier für den ersten Parameter zu SetAuthCookie verwenden. Ja, das bedeutet Kontrollen wie LoginName werden die Ergebnisse nicht erzeugen Sie wollen, aber ein kleines bisschen Bequemlichkeit auf Ihrer Seite ist es nicht wert, so viel Sicherheit zu opfern. –