public async Task<ActionResult> Login(LoginModel model, string returnUrl)
        {
            _logger.Log(string.Format("Login request received for user : {0}", model.UserName),
                LogCategory.Information, GetUserIdentifiableString(model.UserName));
            
            if (ModelState.IsValid)
            {
                var loginResult = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: true);
                switch (loginResult)
                {
                    case SignInStatus.Success:
                        var user = await UserManager.FindByNameAsync(model.UserName);
                        var isAdmin = await UserManager.IsInRoleAsync(user.Id, "Admin");
                        return RedirectToLocal(returnUrl, model.UserName, isAdmin);
                    case SignInStatus.LockedOut:
                        ModelState.AddModelError("", "User account is locked out. Please contact administrator.");
                        return View(model);
                    case SignInStatus.RequiresVerification:
                        ModelState.AddModelError("", "Account verification is pending. Please verify your account.");
                        return View(model);
                    case SignInStatus.Failure:
                    default:
                        ModelState.AddModelError("", "Invalid login attempt.");
                        return View(model);
                }
                //if (loginResult == SignInStatus.Success)
                //{

                //    var identityUser = await UserManager.FindByNameAsync(model.UserName);
                //    if (identityUser != null)
                //    {
                //        _cookieHelper.SetCookie("_userInfo", identityUser.UserName, new TimeSpan(8, 0, 0));

                //        identityUser.aut (model.UserName, model.RememberMe);
                //        _cookieHelper.SetCookie("_notification", "false", new TimeSpan(8, 0, 0));

                //        var userRole = _membershipService.GetRoleForUser(model.UserName);
                                              
                //        if (userRole.Count > 0)
                //        {
                //            _logger.Log(
                //                string.Format("Redirecting to {1} URL for user : {0}", model.UserName, returnUrl),
                //                LogCategory.Verbose, GetUserIdentifiableString(model.UserName));

                //            return RedirectToLocal(returnUrl, model.UserName);
                //        }
                //    }
                //    else
                //    {
                //        _logger.Log(string.Format("MembershipUser is found null for user : {0}", model.UserName), LogCategory.Warning, GetUserIdentifiableString(model.UserName));
                //    }
                //}
                //else
                //{
                //    _logger.Log(string.Format("Failed login attempt for user : {0}", model.UserName), LogCategory.Information, GetUserIdentifiableString(model.UserName));
                //}
            }

            // If we got this far, something failed, redisplay form
            
            return View(model);
        }
        public async Task<ActionResult> Login(string returnUrl, string userName)
        {
            using (var context = _dataContextFactory.Create(ConnectionType.Ip))
            {
                // Hitting database just to let EF create it if it does not
                // exist based on initializer.
                context.Query<Organization>().Count();
            }

            if (!Request.IsAuthenticated)
            {
                _logger.Log(string.Format("Request not authenticated, showing login form."), LogCategory.Information);

                return View();
            }

            var model = new LoginModel();
            if (string.IsNullOrWhiteSpace(userName) && HttpContext.User != null && !string.IsNullOrWhiteSpace(HttpContext.User.Identity.Name))
            {
                userName = HttpContext.User.Identity.Name;
            }

            _logger.Log(string.Format("Request authenticated for user : {0}", userName),
                LogCategory.Information, GetUserIdentifiableString(userName));

            if (string.IsNullOrWhiteSpace(userName))
            {
                _logger.Log("UserName found null for user, showing login form.", LogCategory.Warning);

                return View();
            }

            ViewBag.UserName = userName;
            ViewBag.ReturnUrl = returnUrl;

            model.UserName = userName;
            model.Password = string.Empty;
           
            var identityUser = await UserManager.FindByNameAsync(model.UserName);
            var isAdmin = await UserManager.IsInRoleAsync(identityUser.Id, "Admin");
            if (identityUser == null)
            {
                _logger.Log(string.Format("MembershipUser is found null for user : {0}", userName),
                    LogCategory.Warning, GetUserIdentifiableString(userName));
                return View();
            }

            // Setting a cookie value for notification status.
            _cookieHelper.SetCookie("_notification", "false", new TimeSpan(8, 0, 0));

            var userRoles = await UserManager.GetRolesAsync(identityUser.Id);
            if (userRoles.Count > 0)
            {
                _logger.Log(string.Format("Redirecting to {1} URL for user : {0}", userName, returnUrl),
                    LogCategory.Verbose, GetUserIdentifiableString(userName));

                return RedirectToLocal(returnUrl, userName, isAdmin);
            }

            return View();
        }
        public async Task<ActionResult> Login(LoginModel model, string returnUrl)
        {
            _logger.Log(string.Format("Login request received for user : {0}", model.UserName),
                LogCategory.Information, GetUserIdentifiableString(model.UserName));
            
            if (ModelState.IsValid)
            {
                var loginResult = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: true);
                switch (loginResult)
                {
                    case SignInStatus.Success:
                        var user = await UserManager.FindByNameAsync(model.UserName);
                        var isAdmin = await UserManager.IsInRoleAsync(user.Id, "Admin");
                        return RedirectToLocal(returnUrl, model.UserName, isAdmin);
                    case SignInStatus.LockedOut:
                        ModelState.AddModelError("", "User account is locked out. Please contact administrator.");
                        return View(model);
                    case SignInStatus.RequiresVerification:
                        ModelState.AddModelError("", "Account verification is pending. Please verify your account.");
                        return View(model);
                    case SignInStatus.Failure:
                    default:
                        ModelState.AddModelError("", "User Name and Password does not matches! Please provide your correct login credentials.");
                        return View(model);
                }
            }

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