samedi 11 juin 2016

ASP.Net MVC5 login/logout with AJAX


I am trying to login and logout using AJAX in ASP.Net MVC. When I register and login it works. After login it redirects me to my home page (which is correct) but it does not show the Welcome email and Logout link. What I am missing in code?

Contoller:

public ActionResult Index()
{
    return View();
}

[HttpGet]
public ActionResult LogIn()
{
    return View();
}

[HttpPost]
public ActionResult LogIn(Models.Registration userr)
{
    //if (ModelState.IsValid)
    //{
    if (IsValid(userr.Email, userr.Password))
    {
        FormsAuthentication.SetAuthCookie(userr.Email, false);
        return RedirectToAction("Index", "Home");
    }
    else
    {
        ModelState.AddModelError("", "Login details are wrong.");
    }
    return View(userr);
}

[HttpGet]
public ActionResult Register()
{
    return View();
}

[HttpPost]
public ActionResult Register(Models.Registration user)
{
    try
    {
       if (ModelState.IsValid)
       {
          using (var db = new ApartManagementSystem.DAL.ApartContext())
          {
             var crypto = new SimpleCrypto.PBKDF2();
             var encrypPass = crypto.Compute(user.Password);
             var newUser = db.Registrations.Create();
             newUser.Email = user.Email;
             newUser.Password = encrypPass;
             newUser.PasswordSalt = crypto.Salt;
             newUser.FirstName = user.FirstName;
             newUser.LastName = user.LastName;
             newUser.UserType = "User";
             newUser.CreatedDate = DateTime.Now;
             newUser.IsActive = true;
             newUser.IPAddress = "642 White Hague Avenue";
             db.Registrations.Add(newUser);
             db.SaveChanges();
             return RedirectToAction("Index", "Home");
          }
       }
       else
       {
          ModelState.AddModelError("", "Data is not correct");
       }
    }
    catch (DbEntityValidationException e)
    {
        foreach (var eve in e.EntityValidationErrors)
        {
           Console.WriteLine("Entity of type "{0}" in state "{1}" has the following validation errors:",
           eve.Entry.Entity.GetType().Name, eve.Entry.State);
           foreach (var ve in eve.ValidationErrors)
           {
              Console.WriteLine("- Property: "{0}", Error: "{1}"",
                        ve.PropertyName, ve.ErrorMessage);
           }
        }
       throw;
     }
     return View();
}

    public ActionResult LogOut()
    {
        FormsAuthentication.SignOut();
        return RedirectToAction("Index", "Home");
    }

    private bool IsValid(string email, string password)
    {
        var crypto = new SimpleCrypto.PBKDF2();
        bool IsValid = false;

        using (var db = new ApartManagementSystem.DAL.ApartContext())
        {
            var user = db.Registrations.FirstOrDefault(u => u.Email == email);
            if (user != null)
            {
                if (user.Password == crypto.Compute(password, user.PasswordSalt))
                {
                    IsValid = true;
                }
            }
        }
        return IsValid;
    } 
}

Model:

[Key]
public int UserId { get; set; }

[Required]
[EmailAddress]
[StringLength(150)]
[Display(Name = "Email Address: ")]
public string Email { get; set; }

[Required]
[DataType(DataType.Password)]
[StringLength(150, MinimumLength = 6)]
[Display(Name = "Password: ")]
public string Password { get; set; }

public string PasswordSalt { get; set; }

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

[Required]
[Display(Name = "Last Name: ")]
public string LastName { get; set; }
public string UserType { get; set; }
public System.DateTime CreatedDate { get; set; }
public bool IsActive { get; set; }
public string IPAddress { get; set; }

View class for Login

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true, "Login Failed, check details");

    <div>
        <fieldset>
            <legend>Login Form</legend>
            <div class="editor-label">@Html.LabelFor(u => u.Email)</div>
            <div class="editor-field">
                @Html.TextBoxFor(u => u.Email)
                @Html.ValidationMessageFor(u => u.Email)
            </div>
            <div class="editor-label">@Html.LabelFor(u => u.Password)</div>
            <div class="editor-field">
                @Html.PasswordFor(u => u.Password)
                @Html.ValidationMessageFor(u => u.Password)
            </div>
            <input type="submit" value="Log In" />
        </fieldset>
    </div>

._Layout.cshtml

@if (Request.IsAuthenticated)
{
   <strong>@Html.Encode(User.Identity.Name)</strong>
   @Html.ActionLink("Log Out", "LogOut", "User")
}
else
{
   @Html.ActionLink("Register", "Register", "User")
    <span> | </span>
    @Html.ActionLink("Log In", "LogIn", "User")
}

Aucun commentaire:

Enregistrer un commentaire