我正在尝试在 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.Email
和 model.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。这实际上是解决为用户存储附加数据的常见问题的一个非常好的解决方案。
这是开始阅读相关内容的好地方。不确定您对 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/