none
Programa com login MVC RRS feed

  • 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")
    }

    segunda-feira, 8 de maio de 2017 22:56

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
    terça-feira, 9 de maio de 2017 10:40
  • 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
    quarta-feira, 10 de maio de 2017 11:00
  • 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
    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.

    terça-feira, 9 de maio de 2017 01:10
  • Um então para pegar o nome do usuario na session eu uso faço como e data do ultimo login ?
    terça-feira, 9 de maio de 2017 10:19
  • 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
    terça-feira, 9 de maio de 2017 10:40
  • Não antes de clicar no login não tem sentido isso, estou fazendo uma área administrativa de um site quero que quando eu logar ele pegue o nome a data do ultimo login entendeu para aparecer na pagina principal

    terça-feira, 9 de maio de 2017 11:02
  • Cara tirei o complemento da herança e acertei no controller consegui pegar o nome mais não loga voltou ao problema antigo do outro tópico
    terça-feira, 9 de maio de 2017 11:46
  • 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.

    terça-feira, 9 de maio de 2017 14:35
  • 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);
            }

    terça-feira, 9 de maio de 2017 15:07
  • 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.

    terça-feira, 9 de maio de 2017 19:22
  • 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?
    terça-feira, 9 de maio de 2017 20:33
  • 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.

    quarta-feira, 10 de maio de 2017 00:21
  • 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
    quarta-feira, 10 de maio de 2017 00:56
  • 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.

    quarta-feira, 10 de maio de 2017 01:22
  • isso acho que voltou ao mesmo problema anteiro bora quebra a cabeça mais um pouco rs
    quarta-feira, 10 de maio de 2017 02:05
  • 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
    quarta-feira, 10 de maio de 2017 11:00
  • 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
    quinta-feira, 11 de maio de 2017 17:11