【问题标题】:User table IDs and sqlmembershipprovider用户表 ID 和 sqlmembershipprovider
【发布时间】:2011-08-03 14:35:28
【问题描述】:

我正在为我的第一个 ASP.NET MVC 3 应用程序使用表单身份验证,因此有一个用于登录站点的 dbo.aspnet_Users 表以及管理角色和角色分配的 dbo.aspnet_Roles 和 dbo.aspnet_UsersInRoles 表分别。

数据库是 SQL Server。

此外,我的应用程序数据库中有一个用户表,其布局如下:

UserID (PK, int, not null)
Name (varchar(50), not null)
Phone (varchar(45), null)
Location (varchar(45), null)

UserID PK 作为外键用于各种其他表,用户列表(例如,来自特定位置的用户)被检索并显示在我的网站页面上的下拉列表等中。

我遇到的问题是,当我登录页面时,我想显示一个特定于用户的列表,例如,我创建的最新食谱,虽然我可以从下拉列表中选择自己来获取用户 ID,但我'希望它与我的登录 ID 相关联。

我不确定我是否有一个很好的解决方案。我的一个想法是在我的应用程序的数据库中创建一个查找表,将我的应用程序用户表中的用户 ID 映射到 aspnet_Users 表中的 GUID,类似于

UserGUID(PK, uniqueidentifier, not null )
UserID(PK, int, not null)

然后检索 GUID(还不确定如何),查找它并使用关联的 UserID 来“知道”我是哪个用户。我希望这是有道理的。

有人遇到过类似情况吗?你会如何解决这个问题?


更新:

我目前的方法是在我的应用程序的用户表中添加一个 UserGUID 列(唯一标识符),然后我创建了一个看起来像这样的 BaseController:

public abstract class BaseController : Controller
{
   public Guid UserGuid { get; set; }
   public int UserID { get; set; }

   protected BaseController()
   {
      try 
      {
         UserGuid = (Guid)Membership.GetUser().ProviderUserKey;
         var db = new IceCreamEntities();
         UserID = db.Users.Where(m => m.UserGUID == UserGuid).First().UserID;
      }
      catch (NullReferenceException)
      {
         UserGuid = Guid.Empty;
         UserID = 0;
      }
   }
}

我让我的各种控制器继承了 BaseController 而不是 Controller,因此它们作为基础构造函数的一部分获得了该功能。然后在我需要使用 UserID 填写字段的控制器操作中,我可以这样做:

[HttpPost]
public ActionResult Create(IceCreamFlavorViewModel viewmodel)
{
   ...

   flavor.CreatedBy = this.UserID;

   ...
}

到目前为止似乎工作正常,但我仍然对其他人如何解决这个问题感兴趣。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我在我的 mvc 应用程序中使用了相同的技术,并且它在过去一年中运行良好。但是,如果您在开发过程中还没有走那么远,您可以考虑另一种方法。您可以考虑使用ProfileProvider 来存储用户特定信息,而不是滚动您自己的系统。请查看以下链接
    http://odetocode.com/articles/440.aspx
    http://www.vbforums.com/showthread.php?p=3352498
    Implementing Profile Provider in ASP.NET MVC

    【讨论】:

    • 感谢 Muhammad 提供的信息,我去看看。
    猜你喜欢
    • 2012-01-21
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多