代码之家  ›  专栏  ›  技术社区  ›  devuxer

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

  •  26
  • devuxer  · 技术社区  · 16 年前

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

    问题:

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

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

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

    更新

    关于第三个问题,我仍在寻找更多细节。 我需要自己写吗 MembershipProvider 是吗?我需要对web.config文件做什么更改?将 [Authorize] 如果我编写自己的解决方案,属性仍然有效?我可以使用自动生成的account controller进行一些小的修改,还是基本上需要从头重写account controller?

    6 回复  |  直到 8 年前
        1
  •  16
  •   Mandrilo_Splitsko Davorin    9 年前

    这很简单,您需要驱动membershipProvider并实现validateuser方法。看看这个 post . 我正在使用Postgres和MVC的自定义成员资格提供程序。

        2
  •  13
  •   Aaronaught    16 年前

    我将回答您的最新问题:

    是否需要编写自己的成员资格提供程序?

    如果您(a)想要继续使用表单身份验证,并且(b)拥有一个授权表结构,该结构不遵循与aspnetdb相同的约定,那么是的。如果你不需要formsauth(见下文),那么你可以去掉 MembershipProvider 完全可以,但我不推荐。或者,如果您使用的是与aspnetdb完全相同的安全表,但只想将其指向不同的数据库,则可以继续使用默认的提供程序并简单地更改其配置。

    我需要对web.config文件做什么更改?

    如果你使用自己的习惯 成员身份提供程序 ,然后您需要在 <providers> 剖面图 <membership> 元素并更改 defaultProvider 财产。如果使用标准 AspNetSqlProvider 然后您可能只需要更改连接字符串。

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

    是的,如果您坚持表单身份验证(使用 AspNetsqlProvider(AspNetsqlProvider) 或者编写并注册您自己的会员资格提供商)。否,如果放弃表单身份验证(同样,不推荐)。

    我可以使用自动生成的account controller进行一些小的修改,还是基本上需要从头重写account controller?

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

        3
  •  1
  •   UpTheCreek    16 年前
    1. 不,而且我怀疑大多数人不相信这种肮脏的机制

    2. 一点也不多,尤其是你已经有了桌子。

    3. 看看这个例子: http://forums.asp.net/t/1250726.aspx

        4
  •  1
  •   reallyJim    16 年前

    我们在我们的一个应用程序中正是这样做的,并且发现这非常简单。我们有一个身份验证服务(从控制器调用),它处理对输入的密码进行哈希处理的机制,以查看它是否匹配,然后简单地为我们称为“isvalidlogon”的方法返回一个bool。

    在我们的例子中,目的是尽可能地保持对一个非常微不足道的任务的管理的轻量级。

    我们基本上完全忽略了aspnetdb。如果我们从用户/密码检查中得到有效的响应,我们只需调用标准的FormsAuthentication.RedirectFromLoginPage(用户名,CreateCookieBool);

    希望有帮助。

        5
  •  1
  •   Michel    16 年前

    只是构建相同的内容,所以对1的回答必须是否:) 我正在使用标准的ASP.NET窗体身份验证,在这里我使用FormsAuthentication.RedirectFromLoginPage(用户名,CreateCookieBool)方法登录用户。 我给了一个用户一个唯一的guid(您可以使用任何其他用户ID),并将其与用户名一起存储在用户名参数中(显示在母版页:html.encode(page.user.identity.name.split)(“”..tochararray())[1])。

    在每个控制器/方法中,我必须知道哪个用户登录(通过user.identity.name,拆分字符串并获取userguid)。 另外,我用[authorize]属性修饰这些例程。

        6
  •  1
  •   Houssam Nasser    8 年前

    你好, 只需遵循以下简单步骤:

    弗斯特 ,您可以删除app_data文件夹中的.mdf文件。因为我们不需要这些表格。 那么 ,我们需要更新web.config中的默认连接字符串以指向我们的数据库。

    <connectionStrings>
        <add name=”DefaultConnection” connectionString=”Data Source=SERVER\INSTANCENAME;Initial Catalog=DBNAME;Integrated Security=True” providerName=”System.Data.SqlClient” />
      </connectionStrings>
    

    第三 ,打开nuget package manager并编写以下命令:

    Enable-Migrations
    Add-Migration Init
    Update-Database
    

    签出数据库,所有前缀为asp的ASP.NET成员表都已创建,然后您可以通过运行应用程序并执行成员操作(如注册或登录应用程序)来测试它。

    运行以上命令后创建的表:

    • ASPNET角色
    • AspNetUserClaims
    • aspnetuserlogins
    • ASPNET角色
    • ASPNET用户
    • _迁移历史记录

    资料来源: https://blogs.msmvps.com/marafa/2014/06/13/how-to-create-asp-net-mvc-authentication-tables-in-an-existing-database/