在Aspnet mvc 4 C中进行身份验证#

时间:2015-11-22 04:04:00

标签: c# asp.net asp.net-mvc authentication

我正在尝试在asp.net mvc4 c#中开发一个小型Web应用程序。

我使用Visual Studio Web应用程序创建,其中包含已经过功能的身份验证。

以下是模型:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

    public int UserId { get; set; }

    [Display(Name = "Nom d'utilisateur")]
    public string UserName { get; set; }

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

public class LoginModel
{
    [Required]
    [Display(Name = "Nom d'utilisateur")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Mot de passe")]
    public string Password { get; set; }

    [Display(Name = "Mémoriser le mot de passe ?")]
    public bool RememberMe { get; set; }
}

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

    //[Required]
    [StringLength(100, ErrorMessage = "La chaîne {0} doit comporter au moins {2} caractères.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "Le mot de passe et le mot de passe de confirmation ne correspondent pas.")]
    public string ConfirmPassword { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email")]
    public string Email { get; set; }
}

这是控制器:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        UsersContext db = new UsersContext();
        if (ModelState.IsValid)
        {
         //Some code here
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new {Email = model.Email});
            WebSecurity.Login(model.UserName, model.Password);

            return RedirectToAction("Index", "Home");
        //Some code here
        }
    }

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (!User.Identity.IsAuthenticated)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

                    if (!String.IsNullOrEmpty(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Le nom d'utilisateur ou le mot de passe rentré est incorrect.");
                }
            }
            else
            {
                return View(model);
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

因此,当用户注册时,他会输入他的NAME,他的电子邮件和密码。

例如,假设我注册。

NAME:Myname
电子邮件:mystartup@sanandreas.us
密码:******

要登录,我应该提供我在注册时提供的相同信息。所以这里:

NAME:Myname
密码:******

我的问题:

要登录,当我输入NAME:Myname和正确的密码时,验证成功,但是当我输入“Myname”或“mYname”或......或MYNAME身份验证也成功时。我只是想知道为什么? (我已经解决了这个问题,我只想知道原因。)当我们用Visual Studio启动Web应用程序时,对每个人来说都是一样的吗?

请注意,我创建的用户(user:Myname)是表UserProfiles的唯一用户。

谢谢。

0 个答案:

没有答案