16

我第一次尝试在我的 MVC 4 中使用 SimpleMembership,我已经有一个现有的数据库和基于它创建的 EF5 模型!我搜索了很多,但我找不到如何在我的情况下使用它,也找不到在我自己的模型下的所有东西。

如果有人能给我一个如何做到这一点的想法,那就太好了。

谢谢

4

2 回答 2

16

纯粹作为参考,为 ASP.NET MVC 4 Web 应用程序项目创建一个新的 Internet 应用程序模板(即通过文件 > 新项目)可能是一个好主意。

如果您查看AccountController,正如@zms6445 所说,它是用InitializeSimpleMembership属性装饰的。您可以在根目录的 Filters 文件夹中的 InitializeSimpleMembershipAttribute.cs 文件中找到此属性的实现。

在这里,这是难题的缺失部分 - 您需要连接现有数据库,以便SimpleMembershipProvider. 这是您需要的代码:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        try
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
            }
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Something is wrong", ex);
        }
    }
}

需要注意的一些事项:

  1. CONNECTION_STRING_NAME是您的 web.config ConnectionStrings 中的一个条目 - 您不能在此处使用模型连接字符串 -SimpleMembershipProvider无法识别该格式!您需要指定一个System.Data.SqlClient连接字符串,例如

    <add name="CONNECTION_STRING_NAME" connectionString="data source=SERVER;initial catalog=DATABASE;user id=USER;password=PASSWORD;" providerName="System.Data.SqlClient" />

  2. USER_TABLE是数据库中保存额外用户信息的表,例如名字、姓氏等。它通过 USER_ID_FIELD 链接到自动生成的表。

  3. USER_ID_FIELD通常是用户表的主键。它必须是类型int

  4. USER_ID_NAME是用户的唯一名称,可以是电子邮件地址。

  5. autoCreateTables设置为true确保创建 SimpleMembership 工作所需的表(如果它们尚不存在)。

当然,这个代码只有在你通过 访问页面时才会被触发AccountController,因为它已经被属性修饰了。您可以在其中放置一个断点并查看它的运行情况。

这应该可以帮助您入门 - 如果您遇到困难,Internet 应用程序模板是一个很好的模板。

希望这可以帮助。

于 2013-03-05T21:04:12.683 回答
3

在 appSettings 标记的 web.config 中,添加该行

<add key="enableSimpleMembership" value="true"/>

SimpleMembership 是内置的,所以从这里你只需要编写

[InitializeSimpleMembership]

在您的公共类 AccountController 之上:控制器

当您想强制用户登录您在页面控制器中编写的某个页面时

[Authorize]

该表将在您的数据库中自动生成。如果您想向这些表中添加更多字段,您只需用谷歌搜索即可。

这是更多信息的链接http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5- web-forms-and-asp-net-mvc-4-templates.aspx

于 2013-03-01T15:34:40.217 回答