ASP.NET MVC身份验证使用自定义数据库而不是ASPNETDB?

dev*_*xer 26 c# sql-server asp.net authentication asp.net-mvc

我的User主应用程序数据库中已经有一个表,其中包含一个电子邮件地址(用作用户名)和密码.我想使用我的数据库而不是默认的身份验证数据库(ASPNETDB)进行身份验证.

问题:

  1. 这是一个坏主意吗?使用我自己的数据库进行身份验证是否是一大堆蠕虫?

  2. 这样做我加了多少工作?我已经有用于散列密码的代码和一个检查电子邮件和密码是否与数据库匹配的查询.所以,我不会从头开始.

  3. 使用我的数据库而不是ASPNETDB需要做什么?我希望这可以通过几个简单的步骤来描述,但如果没有,你能指出我的好消息吗?

更新

在我的第三个问题上,我仍然在寻找更多细节.我需要自己写MembershipProvider吗?我需要对web.config文件进行哪些更改?[Authorize]如果我编写自己的解决方案,该属性是否仍然有用?我可以使用自动生成的AccountController进行一些小修改,还是我基本上需要从头开始重写帐户控制器?

Dav*_*rin 16

这很简单,您需要驱动MembershipProvider并实现ValidateUser方法.看看这篇文章.我正在使用Postgres和MVC的自定义会员提供商.


Aar*_*ght 13

我会回答你更新的问题:

我是否需要编写自己的MembershipProvider?

如果您(a)想要继续使用表单身份验证,并且(b)具有不遵循与ASPNETDB相同的约定的授权表结构,那么是.如果你不需要FormsAuth(见下文),那么你可以完全取消MembershipProvider它,但我不推荐它.或者,如果您使用的是与ASPNETDB完全相同的安全表,但只想将其指向其他数据库,则可以继续使用默认提供程序,只需更改其配置即可.

我需要对web.config文件进行哪些更改?

如果您使用自己的自定义MembershipProvider,则需要<providers><membership>元素的部分中注册它并更改defaultProvider属性.如果您使用的是标准,AspNetSqlProvider那么您可能只需要更改连接字符串.

如果我编写自己的解决方案,[Authorize]属性是否仍然有效?

是的,如果您坚持使用表单身份验证(使用AspNetSqlProvider或写入并注册您自己的成员资格提供程序).不,如果您放弃表单身份验证(再次,不推荐).

我可以使用自动生成的AccountController进行一些小修改,还是我基本上需要从头开始重写帐户控制器?

AccountController无论如何你应该重写- 不要将演示代码留在生产应用程序中.但是,如果你必须 - 是的,那AccountController将在与上述相同的条件下工作.