我应该使用什么样的会员制?

时间:2013-04-12 16:32:53

标签: asp.net-mvc-4 asp.net-membership

[问题]

我有一个预先构建的数据库,其中包含用户凭据。关于这个数据库,我唯一可以改变的是如何对密码进行哈希处理。 (不要问这个......让我们说它是愚蠢的,我正在修理它,请。)它有凭据,所以无论我使用什么都必须塑造它。我们正在切换到ASP.net MVC4框架,并从头开始。

[问题]

我应该使用什么会员制来解决问题?

它应该:

a)允许我使用SHA512检查数据库的密码 b)根据结果设置角色 c)装饰控制器中的动作让我感觉自己像个老板

[详细]

假设我有一个网站,供喜欢角色扮演牙刷的人使用。现有数据库中已存在很多(对于中小型网站)数据。我正在转向一个全新的数据库布局,并将从旧的转换。我们可以改变用户系统的管理方式,但说实话,我们宁愿不这样做。我们有一个用户名和密码的用户表。非常简单。

我用google搜索,谷歌搜索,Stack Overflow'd和Stack Overflow'd。我发现的本质上是一本选择你自己的冒险书,他们要么有空白的页码,要么给我一本旧书的页面,这本书的冒险不像这本书。

我希望a)有人会称我为愚蠢的屁股,并指出我要问一个重复的问题,这个问题会导致资源中有一些关于如何做我想要的完整示例和/或文档或b帮我找路。

截至目前,我正在考虑编写自己的用户管理/身份验证过滤系统。我打算使用MembershipProvider,但这似乎有点矫枉过正,似乎并没有按照我的意愿行事。也许我正在缩小我的视野。

我非常愿意破解我自己的方式并努力解决问题,但如果有可用的东西我可以参与其中,我不想自己动手。

更新1

Win发表评论,关于MembershipProvider独立于MVC系统,给了我一个“啊哈!”事情走到一起的那一刻。我正在重新评估我的研究,看看我是不是没有正确拼凑拼图。

更新2

在dkroy和Win的大力帮助下,我对这里发生的事情有了更深入的了解。一旦我完成了所有工作,我会将其包含在编辑中,供其他寻找信息的人使用。从本质上讲,在我考虑废弃它之前,我是在正确的轨道上。我没有实现GetUser调用,我没有调用SetAuthCookie,因此它无法正常工作。我现在正在编写RoleProvider。

2 个答案:

答案 0 :(得分:1)

您可以创建自己的自定义RoleProvider和MembershipProvider。这样,您将能够使用现有的数据库结构,并仍然利用ASP.NET实现的MembershipProvider和RoleProvider协定来提供成员资格服务。对自定义MembershipProviders的最小搜索应该可以帮助您入门。

答案 1 :(得分:1)

a)允许我使用SHA512检查数据库的密码

会员提供商支持SHA512。

b)根据结果设置角色 c)装饰控制器中的动作,这样我就能感觉自己像个老板

如果您想按角色限制用户,则需要实施both Custom Memebership Provider and Custom Role Provider

但是,您不需要覆盖所有。这是主要的 -

// Membership provider 
public override bool ValidateUser(string username, string password)

public override MembershipUser GetUser(string username, bool userIsOnline)

public override string GetUserNameByEmail(string email)

// Role provider
public override bool IsUserInRole(string username, string roleName)

public override string[] GetRolesForUser(string username)