2016-08-15 61 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