public ActionResult ChangePassword()
        {
            if (IsPostRequest)
            {
                var oldPassword = Request.Form["OldPassword"].Trim();
                var newPassword = Request.Form["NewPassword"].Trim();
                var obj = new AjaxModel();
                var user = Membership.GetUser(User.Identity.Name);
                obj.Status = user.ChangePassword(oldPassword, newPassword);
                if (obj.Status)
                {
                    obj.Message = "Bạn đã thay đổi mật khẩu thành công";
                    obj.RedirectUrl = string.Format("/{0}/profile", User.Identity.Name);
                }
                else
                {
                    obj.Message = "Bạn không thể thay đổi mật khẩu, hãy thử lại";
                }
                return Json(obj);
            }

            ViewData[Constants.ViewData.Title] = string.Format("{0} - {1}", MyLifeContext.Settings.Name,
                                                               Messages.ChangePassword);
            return View("ChangePassword", MyLifeContext.Settings.Theme);
        }
        protected override void OnException(ExceptionContext filterContext)
        {
            if (IsPostRequest)
            {
                var obj = new AjaxModel {Message = filterContext.Exception.Message};
                if (filterContext.Exception.InnerException != null)
                {
                    obj.Message += Environment.NewLine + filterContext.Exception.InnerException.Message;
                }

                filterContext.Result = Json(obj);
                filterContext.ExceptionHandled = true;
            }
            else
            {
                base.OnException(filterContext);
            }
        }
        public ActionResult ResetPassword()
        {
            if (IsPostRequest)
            {
                var username = Request.Form["user.UserName"].ToLowerInvariant();
                var obj = new AjaxModel();

                var user = Membership.GetUser(username);
                if (user == null)
                {
                    obj.Message = "Tên đăng nhập này không tồn tại";
                    goto Return;
                }

                if (user.IsLockedOut)
                {
                    obj.Message = "Tài khoản của bạn đã bị khóa, hãy liên hệ với người quản lý";
                    obj.RedirectUrl = "/contact";
                    goto Return;
                }

                var password = user.ResetPassword();

                if (string.IsNullOrEmpty(password))
                {
                    obj.Message = "Có lỗi trong quá trình khởi tạo lại mật khẩu";
                    goto Return;
                }

                obj.Status = true;
                obj.Message = "Mật khẩu đã được khởi tạo và gửi về hòm mail của bạn";
                obj.RedirectUrl = "/login";

                var tpl = new XmlMailTemplate(Server.MapPath("App_Data/ResetPassword.xml"))
                              {
                                  Data = new
                                             {
                                                 user.UserName,
                                                 Password = password
                                             }
                              };
                tpl.Process();
                Net.Mail.SendMail.Send(user.Email, tpl.Subject, tpl.Body);

                Return:
                return Json(obj);
            }

            ViewData[Constants.ViewData.Title] = MyLifeContext.Settings.Name + " - " + Messages.ResetPassword;
            return View("ResetPassword", MyLifeContext.Settings.Theme);
        }
        public ActionResult Register()
        {
            if (IsPostRequest)
            {
                var username = Request.Form["UserName"].ToLowerInvariant();
                var password = Request.Form["Password"];
                var email = Request.Form["Email"];
                var obj = new AjaxModel();

                // Deny user name in bad list
                var streamReader = new StreamReader(MyLifeContext.WorkingFolder + "App_Data\\BlockUsers.txt");
                var words = streamReader.ReadToEnd().Replace(Environment.NewLine, " ").Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);
                streamReader.Close();
                if (new List<string>(words).Contains(username) ||
                    !Regex.Match(username, Constants.Regulars.User).Success)
                {
                    obj.Message = string.Format("Tên đăng nhập '{0}' không được chấp nhận", username);
                    goto Return;
                }

                MembershipCreateStatus status;
                var user = Membership.CreateUser(username, password, email, null, null, true, out status);

                switch (status)
                {
                    case MembershipCreateStatus.Success:
                        OnUserRegisted(user);

                        obj.Status = true;
                        obj.Message = "Bạn đã đăng ký thành công.";
                        obj.RedirectUrl = "/" + user.UserName;
                        goto Return;
                    case MembershipCreateStatus.DuplicateEmail:
                        obj.Message = "Địa chỉ email này đã có người sử dụng.";
                        goto Return;
                    case MembershipCreateStatus.DuplicateUserName:
                        obj.Message = "Tên đăng nhập này đã có người sử dụng.";
                        goto Return;
                    case MembershipCreateStatus.InvalidEmail:
                        obj.Message = "Địa chỉ email không hợp lệ";
                        goto Return;
                    case MembershipCreateStatus.InvalidPassword:
                        obj.Message = "Mật khẩu của bạn quá ngắn hoặc quá đơn giản";
                        goto Return;
                    default:
                        obj.Message = "Hệ thống không chấp nhận việc đăng ký thành viên, bạn hãy thử lại sau";
                        goto Return;
                }

                Return:
                return Json(obj);
            }

            ViewData[Constants.ViewData.Title] = MyLifeContext.Settings.Name + " - Đăng ký tài khoản";
            return View("Register", MyLifeContext.Settings.Theme);
        }
        public ActionResult Login()
        {
            if (IsPostRequest)
            {
                var username = Request.Form["UserName"].ToLowerInvariant();
                var password = Request.Form["Password"];
                var returnUrl = Request.Form["ReturnUrl"];
                var obj = new AjaxModel();
                if (Membership.ValidateUser(username, password))
                {
                    HttpContext.User = new GenericPrincipal(new GenericIdentity(username), null);
                    FormsAuthentication.SetAuthCookie(username, false);
                    if (string.IsNullOrEmpty(returnUrl))
                    {
                        returnUrl = string.Format("/{0}", username);
                    }
                    obj.Status = true;
                    obj.RedirectUrl = returnUrl;
                    obj.Message = "Bạn đã đăng nhập thành công";
                }
                else
                {
                    obj.Message = "Tên đăng nhập hoặc mật khẩu của bạn không hợp lệ";
                }

                return Json(obj);
            }

            ViewData[Constants.ViewData.Title] = MyLifeContext.Settings.Name + " - " + Messages.Login;
            return View("Login", MyLifeContext.Settings.Theme);
        }