2016-08-15 59 views
0

我正在嘗試向用戶標識添加項目,但我認爲這也可以通過其他方式完成。在用戶登錄後向ASP.NET MVC Identity添加定製屬性

我已經添加了一些自定義字段到用戶身份,但我想要做的是一旦用戶已成功登錄,我檢查他們是否被分配到多個分支(商店位置),然後提供一個列表讓用戶選擇他們希望顯示數據的分支。

我已經做到了這一點,但現在我想在用戶session/cookie/Identity中存儲每個分支(不知道使用什麼術語)。用戶顯示一些複選框,一旦他們點擊保存,我不確定該怎麼做。

我需要將其保存在這個函數:

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

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

      } 

      return RedirectToAction("Index"); 
     } 

哪些步驟,我需要採取能夠做到這一點?

+0

爲什麼要將其存儲在會話?爲什麼不使用session/cookie中的UsreId查詢它(從表/緩存的數據)? – Shyju

+0

我正在查詢用戶分配給他們的表中的分支,但用戶每次都會使用不同的分支。我需要根據選擇哪個分支來查詢數據。我想用UserID從一些緩存數據中查詢它,我該怎麼做?將其存儲在緩存數據,會話/ cookie中? –

回答

1

這取決於您最終的目標是什麼。分支機構的選擇應該持續還是短暫?根據你的評論,這聽起來像你想保存它在當前會話中,但然後讓用戶下一次回來時再次選擇。如果這就是你的應用程序真正需要的東西,那麼很好,但在我看來,像這樣的東西應該永久保存,用戶可以在他們認爲合適的時候更新這些選擇,或者完全是臨時的,即對於當前的請求,如分支或分支過濾一組結果。

僅存儲當前的瀏覽器會話會引起用戶是否會意識到他們的選擇會在其他視圖中持續存在的問題,相反,他們是否會理解爲什麼他們每次回來都必須不斷設置分支到現場。

這就是說,你的選擇:

  • 永久 - 商店用戶的實體。在ApplicationUserStoreBranch(或其他)之間添加一個M2M。
  • 瞬態 - 設置在Session

從技術上講,你可以使用聲明,但它們並不適合這個。當1)被存儲的數據不適用於每個用戶或2)被存儲的數據本質上是短暫的,但應該在會話期間存在。一個很好的例子是使用一個類似於Facebook的身份驗證令牌。並不是每個用戶都必須擁有Facebook身份驗證令牌,因此它不是您想要的數據庫列,並且該身份驗證令牌通常具有一定的生命週期,因此它是臨時的,但仍然需要堅持,即使會話被摧毀了。

Session根據您對您想要達到的目標的描述,您是最好的選擇,但我會強烈地強調,只要用途可以在以後改變,可能會永久堅持這一選擇。將它保存到會話,我就真的只是直接保存您的字符串數組到會話(無需for循環):

Session["BranchNames"] = branchNames; 
+0

謝謝@Chris。將它存儲在會話中正是我所需要的,並訪問會話,請使用:string [] sessionBranchNames =(string [])Session [「BranchNames」]; –

1

我會告訴你使用身份聲明

什麼是索賠?

索賠是關於用戶的語句使約本身,也可以是用戶 名,姓,名,性別,手機,用戶的角色分配 來,等...

您可以詳細瞭解它們here