MVC 3基本自定义成员资格

时间:2012-01-27 01:32:31

标签: asp.net-mvc-3

我将尝试一步一步地解决这个会员制度......

所以,让我们说:

步骤1,我创建了一个SQL数据库,在该数据库中,我有一个非常基本的Users表,如下所示:

Users
UserID int, identity, primary key
UserName nvarchar(25)
UserPassword nvarchar (25)
UserEmail nvarchar (75)

第2步,我创建了一个新的ASP.NET MVC3 Web应用程序

步骤3,我使用Razor视图引擎选择Internet Application模板并选中Use HTML 5语义标记

步骤4,我添加了一个ADO.NET实体数据模型

步骤5,在实体数据模型向导中,我选择从数据库生成

步骤6,选择我的数据连接,然后选择在Web.Config中保存实体连接设置

步骤7,在实体数据模型向导中==>选择你的数据库对象,我检查表格,并在“Pluralize or singularize generated objects names”和“Include foreign key columns in model”中保留默认检查,然后单击Finish

步骤8,我构建解决方案

步骤9,我右键单击.edmx文件并选择“添加代码生成项...”

步骤10,我添加一个新的ADO.NET DbContext Generator(然后创建所有表模型)

好的,所以我不知道如何在我的Users表中使用内置的Account / Membership系统。就目前而言,无论如何,对于这个特定的项目,我不需要角色和什么不是,只需要[授权]功能......

那么,当用户访问网站并注册或登录时,我需要做什么,以便应用程序使用我的Users表?最终,当用户登录时,[authorize]装饰将适用于我的用户群。


编辑:感谢Olivehour ...以下更改,真正的补充,使这项工作......

在第10步之后:(旁注:从用户表中删除UserPassword,您将不需要它)

步骤11,运行aspnet_regsql.exe工具,将ASP.NET表添加​​到数据库中。

步骤12,打开Web.config文件,只复制EntityFramework connectionString中的“数据源”信息,然后将“ApplicationServices”connectionString“数据源”粘贴并替换为EntityFramework的数据源。

步骤13,在Solution Explorer中,右键单击Controller目录并添加Controller。此时继续添加您的UserController

步骤14,在AccountController的[HttpPost] Register操作方法中,在“if(createStatus == MembershipCreateStatus.Success)”语句中添加以下内容:

TheNameOfYourEntities db = new TheNameOfYourEntities();
User user = new TheNameOfYourProject.User();
user.UserName = model.UserName;
user.UserEmail = model.Email;
db.Users.Add(user);
db.SaveChanges();

步骤15,构建解决方案,全部保存,运行

1 个答案:

答案 0 :(得分:1)

我们将内置成员资格提供程序与应用程序用户表分开。

我建议使用内置成员资格提供程序来处理用户身份验证。有些设置需要您做出一些决定。例如,用户名是什么?是否要允许电子邮件地址作为用户名?如果是这样,您应该在web.config中的provider元素上将requiresUniqueEmail设置为true。 (我们将用户的电子邮件地址设为用户名。这简化了很多事情。)

对于使用EF创建的自定义用户表,不要将其用于登录。使用它来存储有关用户的特定于应用程序的信息。但是,为表中的行提供与成员资格提供程序db中的用户名相同的主键值。

因此,如果用户使用电子邮件地址olivehour@stackoverflow.com注册,您首先要Membership.CreateUser将它们添加到提供者数据库,并在同一操作中,向用户表中添加一行, olivehour@stackoverflow.com的主键。

这样您就不必在数据库中存储任何密码加密值...您将其外包给会员提供商。当用户登录时,FormsAuthentication将写入cookie以维护登录状态。在控制器操作中,您可以使用代码User.Identity.Name获取用户名。使用该值作为参数从自定义应用程序特定用户表中选择行。