今天我正在尝试关注 Shai Raiten's Blog 的这篇文章当我完成它时,createStatus 返回 invalidAnswer 这是我的注册操作
[HttpPost]
[AllowAnonymous]
[CaptchaValidation("CaptchaCode", "registerCaptcha", "Wrong captcha!")]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, false, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
MailHelper.SendConfirmationEmail(model.UserName);
return RedirectToAction("Confirmation", "User");
}
else
{
ModelState.AddModelError("", "Failed!");
}
}
return View(model);
}
这是我的 RegisterModel.cs
public class RegisterModel
{
[Key]
public long ID { set; get; }
[Required(ErrorMessage = "Do not Skip this")]
public string UserName { set; get; }
[StringLength(500, MinimumLength = 6, ErrorMessage = "Atleast 6 characters in passwords")]
[Required(ErrorMessage = "Do not Skip this")]
public string Password { set; get; }
[Compare("Password", ErrorMessage = "Wrong confirm passwords")]
[Required(ErrorMessage = "Do not skip this")]
public string ConfirmPassword { set; get; }
public string Name { set; get; }
public string Address { set; get; }
[RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", ErrorMessage = "This is not an email")]
public string Email { set; get; }
public string Phone { set; get; }
public bool EmailConfirm { set; get; }
}
对我的任何建议,非常感谢你们提供的所有帮助。
请您参考如下方法:
您可以做的最简单的事情是:
- 首先,您应该在您的用户模型中定义一个属性,该属性将保存电子邮件确认 token 。此外,您应该定义默认为
false的属性bool IsEmailConfirmed。 - token 应该类似于自动生成的随机字符串。例如。 Guid.NewGuid().ToString()
- 然后,您应该定义另一个操作,比如
[HttpGet, AllowAnonymous] ConfirmEmail(string email, string token),它将验证该 token 是否保存在数据库中并更新IsEmailConfirmed相应地。 - 然后您所询问的链接应该指向一个类似于以下内容的 url:
http://YOUR.SERVER/YourController/ConfirmEmail?email={0}&token={1},其中{0}是用户电子邮件,{1}是您的用户电子邮件确认 token 。它应该返回一个 View ,告知确认是否成功。
但是,我建议不要重新发明轮子,而只是使用 Asp.Net Identity 2.0 framework ,它将为您完成所有 authn 和 authz 的工作。
