簡體   English   中英

MVC 個人用戶帳戶登錄值持久化

[英]MVC Individual User Accounts login value persisting

我有一個使用 ASP.NET Identity 的 MVC 網站。 本站可用於多個客戶數據,每個客戶相互獨立,不得共享任何數據。 每個交易都應僅在客戶選擇時發生數據。

但是,登錄的用戶可以看到所有客戶,他們只需在登錄時選擇與哪個客戶進行交易。

因此,在登錄時,他們將從下拉列表中選擇他們的客戶,然后查看所有客戶項目、個人信息以及可以為該客戶完成的獨特事情。

所以例如

var allItems = from a in db.Items where a.CustomerId = customerId select a;

這個客戶 ID 可以在登錄時獲得,因為它是用戶從下拉菜單中選擇的。 但是,如何在整個用戶登錄會話中堅持此選擇? 我顯然不想將它保存到數據庫中,因為它不是一個永久的選擇,我希望在他們注銷時選擇消失,讓他們可以在下次登錄時自由選擇另一個客戶。

另一個很酷的事情是能夠覆蓋 DbContext 中的 get 方法以僅檢索與登錄時選擇的任何客戶 ID 匹配的項目

public DbSet<Item> ItemsAll { get; set; }

public IQueryable<Item> Items
{
     get
     {
          return ItemsAll.Where(x => x.Customer == myLoggedInCustomerChoice);
     }
}

將該值添加到會話變量,並在加載頁面時對其進行檢查。

您的選擇是

  • 將其保存到數據庫中。 適合如果你真的從來不想用戶重新選擇。 這樣做的缺點是,如果您還想在客戶端上捕獲它,您還需要使用其他選項之一將值保存在客戶端上。
  • 堅持到餅干。 不要設置過期時間或將其設置為與“記住我”持久化的身份驗證 cookie 相同的過期時間。
  • 將其持久化到 HTML5 本地存儲 (window.localStorage)。 這里的缺點是您需要在返回使用此信息的服務器的任何請求中包含任何變量。 對於其他選擇,這不是必需的。
  • 將其保留在 Session 對象中並配置 Sessions 以使用數據庫。 我不是 Session 對象的忠實粉絲,所以我將使用它作為最后的手段。
  • 隱藏字段 (input type='hidden') - 與本地存儲相同的缺點,但您必須確保該值不會在導航中丟失。 因此,這對於 SPA 來說很好,其中一些內容保持靜態,但對於傳統的 Web 應用程序來說並不方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM