傑夫,
正如我在上面你的問題評論說,你必須使用的用戶名ClaimedIdentifier - 也就是說,要SetAuthCookie第一個參數。這有一個巨大的安全原因。如果您想更多地瞭解原因,請隨時在[email protected]上發起主題。
現在關於你關於整個用戶對象的問題......如果你想把它作爲一個cookie發送出去,你必須將你的用戶對象序列化爲一個字符串,然後你必須在一些防止用戶篡改的方式。你可能也想加密它。 Blah等等,這是很多的工作,你最終會得到一個大的cookie來回發送你不需要的每個Web請求。
我在我的應用程序中解決您所述問題的方法是將靜態屬性添加到名爲CurrentUser的Global.asax.cs文件中。就像這樣:
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;
}
}
通知我緩存結果在HttpContext.Current.Items詞典,這是具體到一個HTTP請求,並保持用戶獲取到一個單一的命中 - 只有獲取它的第一次如果一個頁面實際上需要CurrentUser信息。
因此,一個頁面可以很容易地獲取當前登錄的用戶信息是這樣的:
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
}
你在使用使用OpenID登錄?我以前使用過http://code.google.com/p/dotnetopenid/取得了一些成功 - 我確定它提供了示例,說明您在此處要做什麼。 – Noldorin 2009-04-22 23:14:59
我正在使用他們的ASP.NET MVC示例登錄。只是核心,然後拿起他們的方法在案例語句(這是我上面的行代碼。原來,代碼看起來像這樣... FormsAuthentication.SetAuthCookie( response.ClaimedIdentifier,false);我剛剛用我的用戶顯示名稱替換了字符串,我希望能夠用它來推送一些基本信息,就像他們在這裏讓他們知道你的分數,你的userId(在超鏈接中 – 2009-04-22 23:32:03