public ActionResult Login() { // se estiver logado if (Helpers.Helper.isAuthenticated) { // redireciona para tela inicial return RedirectToAction("Index", "Home"); } // define model para view LoginVM model = null; // busca pelo cookie que contem os dados do usuario HttpCookie cookie = Request.Cookies["RP_StoreDataLogin"]; // se existir o cookie e se houver nome de usuario if (cookie != null && !string.IsNullOrEmpty(cookie.Value)) { // instancia model com dados disponiveis model = new LoginVM { Usuario = cookie.Value, LembrarUsuario = true }; } // retorna view com model return View(model); }
public ActionResult Login(LoginVM model) { // se ModelState for valido if (ModelState.IsValid) { try { // Cria numero para o acesso (ID do acesso) string nrAcesso = Guid.NewGuid().ToString(); // executa metodo de consulta e validacao de usuario LoginData login = DoLogin(model, nrAcesso); if (login.ShowCaptcha) { return View("LoginCaptcha", new LoginCaptchaVM { Usuario = model.Usuario, Senha = model.Senha }); } // se o login for Sucesso if (login.LoginMessage == LoginMessageId.Sucesso) { // faz login do usuario no sistema CriarCookieUsuario(login.Usuario, nrAcesso, model.LembrarUsuario); // registra o acesso como sucesso AccessRegister(login.Usuario.dsLogin, true); // remove usuario da sessao Session.Remove("login.UsuarioId"); // remove Id de acesso na sessao Session.Remove("login.nrAcesso"); // redireciona para tela inicial return RedirectToAction("Index"); } // se existir algum erro no login else { // se o usuario for invalido if (login.LoginMessage == LoginMessageId.UsuarioInvalido) { // adiciona erro no modelstate ModelState.AddModelError("Senha", "Usuário ou senha incorretos"); } // se o usuario estiver inativo else if (login.LoginMessage == LoginMessageId.UsuarioInativo) { ModelState.AddModelError("Usuario", "Usuário não está ativo no sistema"); } // se a senha for invalida else if (login.LoginMessage == LoginMessageId.SenhaInvalida) { // adiciona erro no modelstate ModelState.AddModelError("Senha", "Usuário ou senha incorretos"); // se as tentivas forem maiores que o definido if (login.TentativasFalhas >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"])) { // retorna para a view que contem o captcha return View("LoginCaptcha", new LoginCaptchaVM { Usuario = model.Usuario, Senha = model.Senha }); } } // se o usuario estiver com a senha expirada else if (login.LoginMessage == LoginMessageId.SenhaExpirada) { // adiciona mensagem de alerta this.AddFlashMessage("Senha expirada! Altere para continuar acessando.", FlashMessage.ALERT); // adiciona o usuario em sessao Session.Add("login.UsuarioId", login.Usuario.idUsuario); // Adiciona Id de acesso na sessao Session.Add("login.nrAcesso", nrAcesso); // retorna para a view que contem o formulario de alteração da senha return View("ChangePassword", new EditarSenhaVM { Usuario = model.Usuario, Senha = model.Senha }); } // se o usuario estiver sem licenca disponivel else if (login.LoginMessage == LoginMessageId.SemLicenca) { ModelState.AddModelError("Usuario", "Não existem licenças disponíveis, tente novamente mais tarde."); } } } catch (Exception ex) { // adiciona mensagem de erro this.AddFlashMessage(RP.Util.Exception.Message.Get(ex), FlashMessage.ERROR); // redireciona para login return RedirectToAction("Login"); } } return View(model); //} }
private LoginData DoLogin(LoginVM model, string nrAcesso) { LoginData data = new LoginData { LoginMessage = LoginMessageId.Sucesso, ShowCaptcha = false }; using (Context db = new Context()) { using (var transaction = new RP.DataAccess.RPTransactionScope(db)) { // instancia bll do usuario UsuarioBLL usuarioBLL = new UsuarioBLL(db, 0); // consulta usuario pelo login Usuario usuario = usuarioBLL.FindSingle(u => u.dsLogin.ToLower().Equals(model.Usuario.ToLower())); //if (data.ShowCaptcha) // return data; // se o usuario nao existir if (usuario == null) { data.LoginMessage = LoginMessageId.UsuarioInvalido; } // se o usuario existir else { data.ShowCaptcha = usuario.nrFalhalogin >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"]); // se a senha informada estiver incorreta if (!(usuario.dsSenha == RP.Util.Class.Util.getHash(model.Senha))) { // registra a tentiva falha de acesso AccessRegister(model.Usuario, false); // seta status do login data.LoginMessage = LoginMessageId.SenhaInvalida; // instancia bll de Log //RP.Log.Model.BLL LogBLL = new Log.Model.BLL(); // altera a quantidade de falhas usuario.nrFalhalogin = (usuario.nrFalhalogin ?? 0) + 1; data.ShowCaptcha = usuario.nrFalhalogin >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"]); // armazena tentativas falhas de acesso data.TentativasFalhas = usuario.nrFalhalogin ?? 0; // armazena as tentativas falhas de acesso if (data.TentativasFalhas >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaBloquearUsuario"])) { // bloqueia o usuario no banco usuario.flAtivo = "Não"; usuarioBLL.Update(usuario); // seta status do login data.LoginMessage = LoginMessageId.UsuarioInativo; } else { usuarioBLL.UpdateLoginCount(usuario); } } // se a senha estiver correta else { // se usuario não estiver ativo if (!(usuario.flAtivo.ToLower().Equals("sim"))) { data.LoginMessage = LoginMessageId.UsuarioInativo; } // se usuario nao tiver licencas disponiveis else if (!Auth.Class.License.UseLicense(usuario.dsLogin, nrAcesso)) { data.LoginMessage = LoginMessageId.SemLicenca; } // se a senha do usuario estiver expirada else if ((usuario.dtValidade ?? DateTime.Now.Date.AddDays(-1)) < DateTime.Now.Date) { data.LoginMessage = LoginMessageId.SenhaExpirada; } else { usuario.nrFalhalogin = 0; usuarioBLL.UpdateLoginCount(usuario); } // armazena usuario data.Usuario = usuario; } usuarioBLL.SaveChanges(); transaction.Complete(); } } } return data; }