我第一次尝试在我的 MVC 4 中使用 SimpleMembership,我已经有一个现有的数据库和基于它创建的 EF5 模型!我搜索了很多,但我找不到如何在我的情况下使用它,也找不到在我自己的模型下的所有东西。
如果有人能给我一个如何做到这一点的想法,那就太好了。
谢谢
我第一次尝试在我的 MVC 4 中使用 SimpleMembership,我已经有一个现有的数据库和基于它创建的 EF5 模型!我搜索了很多,但我找不到如何在我的情况下使用它,也找不到在我自己的模型下的所有东西。
如果有人能给我一个如何做到这一点的想法,那就太好了。
谢谢
纯粹作为参考,为 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);
}
}
}
需要注意的一些事项:
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" />
USER_TABLE
是数据库中保存额外用户信息的表,例如名字、姓氏等。它通过 USER_ID_FIELD 链接到自动生成的表。
USER_ID_FIELD
通常是用户表的主键。它必须是类型int
。
USER_ID_NAME
是用户的唯一名称,可以是电子邮件地址。
autoCreateTables
设置为true
确保创建 SimpleMembership 工作所需的表(如果它们尚不存在)。
当然,这个代码只有在你通过 访问页面时才会被触发AccountController
,因为它已经被属性修饰了。您可以在其中放置一个断点并查看它的运行情况。
这应该可以帮助您入门 - 如果您遇到困难,Internet 应用程序模板是一个很好的模板。
希望这可以帮助。
在 appSettings 标记的 web.config 中,添加该行
<add key="enableSimpleMembership" value="true"/>
SimpleMembership 是内置的,所以从这里你只需要编写
[InitializeSimpleMembership]
在您的公共类 AccountController 之上:控制器
当您想强制用户登录您在页面控制器中编写的某个页面时
[Authorize]
该表将在您的数据库中自动生成。如果您想向这些表中添加更多字段,您只需用谷歌搜索即可。