自定义表单身份验证MVC?

时间:2012-01-05 06:52:31

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我开发了MVC网络应用程序。现在,我想在其中使用自定义表单身份验证。 为简单起见,我使用SQL成员资格提供程序进行注册。但是,我不想创建其他自定义表和地图成员资格表,因为我只需要创建简单的模块我需要坚持使用默认表

我使用Aspnet_regsql工具

生成了sql成员资格表

现在在AccountModel.cs到RegisterModel类中,我又增加了两个字段,如:

public class RegisterModel
{
   [Required]
   [Display(Name = "User name")]
   public string UserName { get; set; }

   [Required]
   [Display(Name = "First name")]
   public string FirstName { get; set; }

   [Required]
   [Display(Name = "Last name")]
   public string LastName { get; set; }
}

同时更新了dbo.aspnet_Membership表并添加了另外两个字段firstname和lastname

现在在AccountController.cs中的控制器内部 代码:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus;
        Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus); 
    }
}

此处,CreateUser是默认的成员资格方法,因此我无法在创建用户时将自定义字段(名字和姓氏)插入表中?

我该怎么做?

2 个答案:

答案 0 :(得分:2)

不要扩展成员资格表。只是不要这样做。别。我的意思是。不要这样做。真。我是认真的。不要这样做。

相反,在应用中创建一个Users表,将其主键设为GUID,然后添加自定义字段。创建用户时,将新记录插入users表并使用CreateUser返回的MembershipUser的ProviderUserKey。这非常简单,不需要弄乱会员系统。

我知道你说你不想,但这是唯一的好方法。

唯一的另一种选择是使用配置文件提供程序来保存此信息,但是您将无法将其映射到其他任何内容。配置文件提供程序非常通用,大多数人发现它没那么有用。

如果修改成员资格表,则会破坏事物。正如您所发现的那样,没有好的方法来处理数据,而无需创建自己的自定义提供程序。

答案 1 :(得分:1)

Ashu,在阅读了您的要求后,我觉得您应该为自己编写自定义提供程序,而不是坚持使用默认设置。我说这个的原因是你手头上唯一能满足你需求的选择是遵循@Mystere Man的解决方案。

  

在应用中创建一个Users表,将其主键设为GUID,然后添加自定义字段。创建用户时,将新记录插入users表并使用CreateUser返回的MembershipUser的ProviderUserKey。这非常简单,不需要弄乱会员系统。

现在,如果您打算与会员提供商合作,那么为什么不为您自己创建一个全新的提供商。人们认为这并不困难。您需要做的就是实现一些抽象类来相应地处理事情。

在线提供了大量的教程,可以从头开始构建自定义成员资格提供程序,我在下面列出了一些。