c# - .Net Mvc 4 中自己写账号注册方法的几个问题

标签 c# asp.net-mvc entity-framework ef-code-first

我正在尝试在 Mvc 4 应用程序中编写自己的帐户注册逻辑。我从基本模板开始,而不是互联网模板。目前我有一个 Tenant 模型,具有许多属性。首先使用代码,我在数据库中创建了一个租户表(随着时间的推移,将会添加更多模型和表 - 我只是想让一个先工作)。

我创建了一个 RegisterTenantModel - 与互联网模板中的类似,只是我使用电子邮件而不是用户名。

public class TenantRegisterModel
{
    [Required]
    [Display(Name="Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

在下面的RegisterTenant方法中,我想要:

  • 允许用户(租户)最初仅使用电子邮件地址和密码进行注册,并且仅在通过电子邮件验证其帐户后才允许他们输入与租户相关的其余属性,因此使用 TenantRegisterModel

在调用 Membership.CreateUser 时,我如何知道 model.Emailmodel.Password 将被添加到 Tenant 表中?同样,如果我对 Landlord 执行与上述相同的场景,我如何知道输入的详细信息已添加到 Landlord 表中?有没有办法通过 Membership.CreateUser 我也可以指定在哪个表中添加用户的详细信息?

注册租户:

public ActionResult RegisterTenant(TenantRegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register a tenant account
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.Email, model.Password);
            // ...
        }
    }

我当然有一个上下文类,目前有 public DbSet<LetLord.Models.Tenant> Tenants { get; set; } ,那么如果我有多个 DbSet,我如何知道正在添加用户详细信息的哪个表?

最佳答案

MVC 4 不使用与 MVC 3 相同的成员资格。您想要查找 simplemembership。这实际上是解决为用户存储附加数据的常见问题的一个非常好的解决方案。

http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

这是开始阅读相关内容的好地方。不确定您对 MVC3 成员资格提供程序和数据库架构有多熟悉,但这在 MVC4 中发生了很大变化。我花了一段时间才找到所有内容。

基本上,使用新设置,您可以使用所需的任何信息创建自己的用户表,并只需将数据库的 1 列映射为 id(现在是一个 int,而不是像 mvc3 成员(member)提供程序和模式那样的 (guid)) )和“用户名”,可以是电子邮件或任何类似的唯一标识符

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: false);

您将连接字符串链接到数据库,它将使用该数据库创建成员资格架构。然后,您可以将模型添加到您的上下文中,并使用 Entity Framework 来实现 dbcontext.UserProfile.FirstName 等函数。

这里有一些更多的起点 Material

http://patrickdesjardins.com/blog/asp-net-membership-with-mvc4

祝你好运

关于c# - .Net Mvc 4 中自己写账号注册方法的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822346/

相关文章:

c# - 如何指定泛型类型标识符类型(用于数据库查询)以及泛型类型

asp.net-mvc - asp.net mvc 版本将包含验证框架?

c# - WPF C# 全局禁用所有控件的 RecognizesAccessKey

c# - 尝试编写无锁单链表,删除麻烦

c# - 使用 .ToString() 在 C# 中格式化十进制字符串

.net - 代码优先 Entity Framework 关系始终为空

.net - 使用具有 "Code First"模式的 Entity Framework 4.0 时,如何防止标识列上的自动递增

c# - 如何决定何时使用 Ajax 与 Javascript 来实现可维护性

c# - 使用 ASP.NET MVC 形式的数据生成 xml 文件

entity-framework - 在 Entity Framework 4 中默认禁用延迟加载