2015-03-25 62 views
0

我怎麼能輕鬆容納用戶對象時,它會記錄用戶對象?如何容易認爲被記錄在

我現在有一個登錄系統,但例如當我想要轉到該用戶的詳細信息頁面時,我將用戶標識(視圖的viewbag中的那些標識)傳遞給ActionResult詳細信息(int userId)。

在細節的ActionResult我然後使用用戶標識來查找UserRepository用戶。但是這似乎爲數據庫創造了許多不必要的工作。

是不是有一個更簡單的方法?也許創建一個用戶的全局變量?

我不想和會議工作,因爲當我部署我的項目(多服務器),這可能產生問題。

我用這個代碼,以使一個AuthorizationCookie當用戶登錄:

  if (IsValid(user.Email, user.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(user.Email, false); 
       ViewBag.UserId = user.UserId; 

       return RedirectToAction("News", "Home"); 
      } 
+0

是毫無意義的添加屬性'ViewBag'如果然後重定向(其立即丟失) – 2015-03-25 11:26:30

+0

當我在視圖中調用詳細信息時,我使用viewbag添加參數 – 2015-03-25 11:30:47

+0

它將爲'null'。 'ViewBag'只爲當前請求生存,並用於將數據從控制器傳遞到視圖。如果你重定向它變成'null'。至於使用全局變量,除非只有一個用戶,否則不適用。以標準方式做它並從數據庫中獲取它有什麼不妥? – 2015-03-25 11:35:21

回答

0

你需要看看ASP.Net身份 http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

這個框架對所有身份驗證和授權支持特徵。

感謝和問候,

Sam Jayander Thiagarajan。

+0

但授權完美無缺,我只是不想通過使用HttpContext.Current.User的一切 – 2015-03-25 11:14:18

+0

之間的userId。 http://stackoverflow.com/a/654590/1624437 – samjayander 2015-03-25 11:19:01

+0

我可以這樣做:HttpContext.User.Identity.Name;這給了我當前登錄用戶的正確名稱,但是,我仍然需要去數據庫來獲取用戶。也許這是不可能的? – 2015-03-25 11:31:29

0

FormsAuthentication類有字符串的UserData屬性。你可以放在那裏,無論你想要什麼。

User myUser = new User(); 
myUser.Name = 'John'; 
myUser.Age = '16'; 
string userData = JsonConvert.SerializeObject(myUser); 
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1/*version*/, myUserName, DateTime.Now,  DateTime.Now.AddMonths(1), 1/*isPersitant*/, userData); 

內部有關用戶信息的行爲,你可以寫類似的東西,讓你的用戶信息

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
if (authCookie != null) 
    { 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
    User currentUser = JsonConvert.DeserializeObject<User>(authTicket.UserData);