Usuário com melhor resposta
Programa com login MVC

Pergunta
-
Boa noite meus amigos estou com um problema que não consigo resolver na tela de login quando digito as informações de senha e login do usuário ele não loga sempre aparece a mensagem em baixo da textbox no usuario "The value 'admin' is invalid" detalhe o 'admin' e tudo que eu digito por exemplo se eu digito claudio vai aparecer "the value 'claudio ' is invalid".
Ai vai a minha classe:
public class LoginModel: Usuario { [Column("Login")] [Display(Name = "Login")] [Required(ErrorMessage = "Informe o Login do usuário", AllowEmptyStrings = false)] public string Login { get; set; } [Column("Senha")] [Display(Name = "Senha")] [Required(ErrorMessage = "Informe a senha do usuário", AllowEmptyStrings = false)] [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] public string Senha { get; set; } }
meu contruller:
/// <param name="returnURL"></param> /// <returns></returns> public ActionResult Login() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel login) { // esta action trata o post (login) if (ModelState.IsValid) // verificar se é valido { using (CadastroEntities contexto = new CadastroEntities()) { var vLogin = contexto.Usuario.Where(p => p.Login.Equals(login.Login)).FirstOrDefault(); if (vLogin != null) { /*Código abaixo verifica se a senha digitada no site é igual a senha que está sendo retornada * do banco. Caso não cai direto no else*/ if (Equals(vLogin.Senha, login.Senha)) { FormsAuthentication.SetAuthCookie(vLogin.Login, false); Session["UsuarioId"] = login.UsuarioId.ToString(); Session["Login"] = login.Nome.ToString(); return RedirectToAction("Index"); } else { /*Escreve na tela a mensagem de erro informada*/ ModelState.AddModelError("", "Senha informado inválido!!!"); } } else { /*Escreve na tela a mensagem de erro informada*/ ModelState.AddModelError("", "Usário informado inválido!!!"); } } } return View(login); }
minha view:
@model Mvc_Login_App.Models.LoginModel @{ ViewBag.Title = "Login"; Layout = "~/Views/Shared/_Layout.cshtml"; } <link href="~/Content/stylle.css" rel="stylesheet" /> @using (Html.BeginForm("Login", "Home", FormMethod.Post)) { @Html.AntiForgeryToken(); @Html.ValidationSummary(); <div class="container"> <div class="form-login"> <div class="panel panel-default"> <div class="panel-heading"> <div class="panel-title">Login do Sistema</div> </div> <div style="padding- class="panel-body"> @if (ViewData.ModelState.IsValid) { <div class="alert al ert-danger col-sm-12"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) </div> } <div class="form-group"> <div style="margin-bottom: 25px" class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> @Html.EditorFor(model => model.Login, new { htmlAttributes = new { @class = "form-control input-lg", placeholder = "Digite o Login", autofocus = true } }) </div> <div>@Html.ValidationMessageFor(model => model.Login, "", new { @class = "text-danger" })</div> </div> <div class="form-group"> <div style="margin-bottom: 25px" class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> @Html.EditorFor(model => model.Senha, new { htmlAttributes = new { @class = "form-control input-lg", placeholder = "Digite sua Senha" } }) </div> <div>@Html.ValidationMessageFor(model => model.Senha, "", new { @class = "text-danger" })</div> </div> <div style="margin- class="form-group"> <div class="col-sm-12 controls"> <input type="submit" value="Acessar" class="btn primary btn-lg" /> </div> </div> </div> </div> </div> </div> } @section Scripts{ @Scripts.Render("~/bundles/jqueryval") }
Respostas
-
Mas no seu form de login você não usa isso em momento algum pelo que vi. Se você precisa realmente armazenar algo em sessão, isso seria após o usuário clicar no botão de Login e ter sua senha validada. Ou você precisa algo diferente disso?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Marcado como Resposta CLAUDIO JOSE terça-feira, 9 de maio de 2017 12:11
-
Você retirou a herança na ViewModel e está fazendo referência às classes corretas na View e na Controller? Tem apenas as propriedades de usuário e senha na ViewModel?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 17:11
-
cara resolvi essa eu criei uma tabela login relacionada com tabela de usuários acredito que erro estava dando porque estou usando EF Database doo jeito que fiz esta certinho agora só tenho que mudar o relacionamento porque fiz login ligado no usuário vou fazer ao contrario Usuário ligado com Login acho que mais certo pela lógica de negocio.
- Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 17:11
Todas as Respostas
-
Claudio,
Na sua ViewModel chamada LoginModel você está herdando a classe Usuario. Esta herança não é necessária.
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
-
Mas no seu form de login você não usa isso em momento algum pelo que vi. Se você precisa realmente armazenar algo em sessão, isso seria após o usuário clicar no botão de Login e ter sua senha validada. Ou você precisa algo diferente disso?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Marcado como Resposta CLAUDIO JOSE terça-feira, 9 de maio de 2017 12:11
-
-
-
Como assim acertou no controller? Como não loga se você conseguiu pegar o nome?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
opa desculpa acertei em partes, acho que estou no caminho olha o controller como ficou mais não consigo logar:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel login) { // esta action trata o post (login) if (ModelState.IsValid) // verificar se é valido { using (CadastroEntities contexto = new CadastroEntities()) { var vLogin = contexto.Usuario.Where(p => p.Login.Equals(login.Login)).FirstOrDefault(); if (vLogin != null) { /*Código abaixo verifica se a senha digitada no site é igual a senha que está sendo retornada * do banco. Caso não cai direto no else*/ if (Equals(vLogin.Senha, login.Senha)) { FormsAuthentication.SetAuthCookie(vLogin.Login, false); Session["UsuarioId"] = vLogin.UsuarioId.ToString(); Session["Login"] = vLogin.Nome.ToString(); return RedirectToAction("Index"); } else { /*Escreve na tela a mensagem de erro informada*/ ModelState.AddModelError("", "Senha informado inválido!!!"); } } else { /*Escreve na tela a mensagem de erro informada*/ ModelState.AddModelError("", "Usário informado inválido!!!"); } } } return View(login); }
-
Dá algum erro? Qual comportamento acontece?
Se colocar um breakpoint na linha do FormsAuthentication, a execução para nele?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
Meu amigo eu fiz um teste novamente não da erro nenhum FormsAuthentication está "<authentication mode="None" />" no conntroller ele passa pela linha do "if (ModelState.IsValid)" e chama a view login e debugando p ValidationMessageFor ele esta vindo null mais no eu preencho no formulario o que pode ser?
-
Ele chega a alcançar a linha
FormsAuthentication.SetAuthCookie(vLogin.Login, false);
?Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
Não ele entra nessa linha abaixo e lê as Views, não chega nem a entrar na chamada do entity.
if (ModelState.IsValid) // verificar se é valid
- Editado CLAUDIO JOSE quarta-feira, 10 de maio de 2017 00:57
-
Você quer dizer então que o IsValid voltou a ser considerado false? Caso sim, você precisará debugar e ver o conteúdo do ModelState errors novamente.
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
-
Você retirou a herança na ViewModel e está fazendo referência às classes corretas na View e na Controller? Tem apenas as propriedades de usuário e senha na ViewModel?
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 17:11
-
cara resolvi essa eu criei uma tabela login relacionada com tabela de usuários acredito que erro estava dando porque estou usando EF Database doo jeito que fiz esta certinho agora só tenho que mudar o relacionamento porque fiz login ligado no usuário vou fazer ao contrario Usuário ligado com Login acho que mais certo pela lógica de negocio.
- Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 17:11