我第一次尝试在我的MVC 4中使用SimpleMembership,我已经有了一个基于它的现有数据库和EF5模型!我搜索了很多,但我无法找到如何在我的情况下使用它,并在我自己的模型下拥有一切。
如果有人能让我知道如何做到这一点,那就太棒了。
谢谢
答案 0 :(得分:16)
纯粹作为参考点,创建ASP.NET MVC 4 Web应用程序项目的新Internet应用程序模板(即通过File> New Project)可能是个好主意。
如果您查看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
通常是Users表的主键。它必须是int
类型。
USER_ID_NAME
是用户的唯一名称,可以是电子邮件地址。
autoCreateTables
设置为true
,以确保创建SimpleMembership所需的表格(如果它们尚不存在)。
当然,如果您通过AccountController
点击某个页面,此代码才会被触发,因为它已由该属性修饰。你可以在那里放一个断点并看看它的实际效果。
这应该可以帮助您入门 - 如果您遇到问题,Internet应用程序模板是一个非常好的模板。
希望这有帮助。
答案 1 :(得分:3)
在appSettings标记的web.config中,添加行
<add key="enableSimpleMembership" value="true"/>
SimpleMembership是内置的,所以你只需要编写
[InitializeSimpleMembership]
在你的公共类AccountController上面:Controller
如果您想强制用户登录您在页面控制器中写入的某个页面
[Authorize]
这些表将在您的数据库中自动生成。如果您想为这些表添加更多字段,您只需简单地谷歌即可。
的链接