【问题标题】:MVC 5 - Best way to cache user data upon first visit?MVC 5 - 首次访问时缓存用户数据的最佳方式?
【发布时间】:2014-02-06 20:44:06
【问题描述】:

我正在使用 Windows 身份验证、ASP.NET MVC5 和 C# 以及 SQL 后端构建帮助台/资产跟踪 Web 应用程序。

在数据库中,我正在考虑通过用户的 Active Directory SID 将支持票证和资产链接到用户,因为该值不会随时间而改变。他们的 SID 以及其他一些信息将进入一个名为“Users”的表中。

由于我是 MVC 新手,在用户第一次访问该站点时,将用户的 SID 导入数据库的最有效方法是什么?我想过在 Global.asax 中构建一些东西,但这似乎违背了 MVC 范式。

或者,有人对更好的方法有建议吗?

【问题讨论】:

  • 在你的控制器中保存会话中的 SID:this.HttpContext.Session["blah"] = SID; ?
  • 我不会将该信息存储在数据库中。只需存储用户名并在他们登录后查找 SID.. 如果您不想每次需要时都从 AD 中提取它,可以将其存储在 Session 中。
  • 将信息存储在数据库中的想法是,如果从 AD 中删除用户帐户,他们的一些信息(主要是名称)会保留在数据库中。这样,即使在他们的帐户消失后,您也可以看到这张或那张票是由 John Doe 创建的,而不仅仅是“S1293803SD093938”。

标签: c# windows-authentication asp.net-mvc-5


【解决方案1】:

这个想法很普遍。

对于大多数网站(例如 StackOverflow),您必须注册。您使用通用登录服务 (StackExchange),并在首次登录时创建一个“个人资料”。

身份验证(可能还有授权)仍然通过原始来源(在您的情况下为 AD)进行,而您真正需要的信息保存在数据库中。

AccountController.Login 操作中,您自己调用 ActiveDirectory。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain)) 
{
     using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, model.UserName))
     {
         // read back the user from database
         // if non-existent: add it using a stored procedure or something like that
     }
}

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2013-09-10
    • 2021-03-12
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多