Esempio n. 1
0
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, change to shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout : false);

            switch (result)
            {
            case SignInStatus.Success:
                using (var dbContext = new EduCareDBEntities())
                {
                    AspNetUser user     = dbContext.AspNetUsers.Where(d => d.Email == model.Email).FirstOrDefault();
                    AspNetRole userRole = user.AspNetRoles.FirstOrDefault();
                    Session["UserEmail"] = user.Email;
                    Session["Role"]      = userRole.Name;
                    if (userRole.Name == "Parents")
                    {
                        List <Parent> parentList = dbContext.Parents.ToList();
                        Parent        parent     = parentList.Where(d => d.Email == user.Email).FirstOrDefault();
                        if (parent != null)
                        {
                            Session["UserName"]     = parent.FirstName + " " + parent.LastName;
                            Session["ParentObject"] = parent;
                        }
                        else
                        {
                            ModelState.AddModelError("", "Your account is not yet activated!");
                            return(View(model));
                        }
                    }
                    else if (userRole.Name == "Student")
                    {
                        List <Student> studentList = dbContext.Students.ToList();
                        Student        student     = studentList.Where(d => d.Email == user.Email).FirstOrDefault();
                        if (student != null)
                        {
                            Session["UserName"]      = student.FirstName + " " + student.LastName;
                            Session["StudentObject"] = student;
                        }
                        else
                        {
                            ModelState.AddModelError("", "Your account is not yet activated!");
                            return(View(model));
                        }
                    }
                    else if (userRole.Name == "Teacher")
                    {
                        List <Teacher> teacherList = dbContext.Teachers.ToList();
                        Teacher        teacher     = teacherList.Where(d => d.Email == user.Email).FirstOrDefault();
                        if (teacher != null)
                        {
                            Session["UserName"]      = teacher.FirstName + " " + teacher.LastName;
                            Session["TeacherObject"] = teacher;
                        }
                        else
                        {
                            ModelState.AddModelError("", "Your account is not yet activated!");
                            return(View(model));
                        }
                    }
                    else if (userRole.Name == "Admin")
                    {
                        Admin admin = dbContext.Admins.Where(d => d.Email == user.Email).FirstOrDefault();
                        if (admin != null)
                        {
                            Session["UserName"]    = admin.Name;
                            Session["AdminObject"] = admin;
                        }
                        else
                        {
                            Session["UserName"] = user.Email;
                        }
                    }
                }
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            case SignInStatus.RequiresVerification:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }));

            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return(View(model));
            }
        }