我试图用SimpleMembership在我的MVC 4,第一次和我已经有基于它创造了一个现有的数据库和模型EF5! 我搜索了很多,但我无法找到我怎么能在我的情况下使用它,也有在我自己的模型的一切。
这将是巨大的,如果有人可以给我一个想法如何做到这一点。
谢谢
我试图用SimpleMembership在我的MVC 4,第一次和我已经有基于它创造了一个现有的数据库和模型EF5! 我搜索了很多,但我无法找到我怎么能在我的情况下使用它,也有在我自己的模型的一切。
这将是巨大的,如果有人可以给我一个想法如何做到这一点。
谢谢
纯粹作为一个参照点,它可能是一个好主意,以创建一个ASP.NET MVC 4 Web应用程序项目的新的互联网应用程序模板(即通过文件>新建项目)。
如果你看看AccountController
,如@ zms6445说,这是装饰用InitializeSimpleMembership
属性。 你可以找到在根目录中的过滤器文件夹中的文件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
连接字符串,如
<添加名称= “CONNECTION_STRING_NAME” 的connectionString = “数据源= SERVER;初始目录=数据库;用户ID = USER;密码= PASSWORD;” 的providerName = “System.Data.SqlClient的”/>
USER_TABLE
是在你的数据库中的表来保存额外的用户信息,如名字,姓氏等,这是与通过USER_ID_FIELD自动生成的表。
USER_ID_FIELD
通常是用户表的主键。 它的类型必须为int
。
USER_ID_NAME
是对于用户来说,这可能是一个电子邮件地址的唯一名字。
autoCreateTables
设置为true
,以确保生成所需的SimpleMembership工作表,如果他们不存在。
当然,这个代码只得到,如果你通过打一个页面解雇AccountController
,因为这已经被装饰的属性。 你可以把一个断点在那里,看到它的行动。
这应该让你开始 - 互联网应用程序模板是一个非常不错的模板,如果你碰到困难跟随。
希望这可以帮助。
在标签的appSettings你的web.config,添加行
<add key="enableSimpleMembership" value="true"/>
SimpleMembership是内置,从这里你只需要编写
[InitializeSimpleMembership]
你上面的公共类的AccountController:控制器
当你想强制用户登录在某一页你在页面控制器写
[Authorize]
这表将在数据库中自动生成。 如果您想更多的字段添加到这些表,您需要简单地google一下。
这里有一个链接以获取更多信息http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5- web的表单和-ASP净MVC-4-templates.aspx