2016-08-06 34 views
1

, also versuche ich, mein Login-Formular zu arbeiten. Ich habe eine Tabelle in meiner Datenbank, mit der ich mich anmelden möchte. Die Tabelle enthält zwei Zeilen, Benutzername und Kennwort, und wenn der Benutzer sie richtig eingibt, sollte sie auf die richtige Seite umgeleitet werden. Aber wenn ich den Knopf drücke, passiert nichts, was mache ich hier falsch?Anmeldeformular validieren ASP.NET MVC

Modell:

namespace Barndomshem.Models 
{ 
    public class User 
    { 
     public string Username { get; set; } 
     public string Password { get; set; } 
    } 
} 

Ausblick:

<div class="container"> 
    <div class="row"> 
     <div class="box"> 
      <div class="col-lg-12"> 
       <form class="form-wrapper" id="contact-form" method="post" role="form" novalidate> 
        <div class="form-group"> 
         <div class="row"> 
          <div class="form-group col-lg-4"> 
           <label for="name"> 
            Användarnamn 
           </label> 
           <input type="text" id="name" name="name" class="form-control" data-errmsg="Fyll i användarnamn." 
             placeholder="Ditt Användarnamn" required /> 
          </div> 
         </div> 
        </div> 
        <div class="form-group"> 
         <div class="row"> 
          <div class="form-group col-lg-4"> 
           <label for="number"> 
            Lösenord 
           </label> 
           <input type="text" id="number" name="number" class="form-control" data-errmsg="Fyll i lösenord." 
             placeholder="Ditt Lösenord" /> 
          </div> 
         </div> 
        </div> 
        <div class="row"> 
         <div class="col-md-2 col-sm-2 offset2"> 
          <input type="submit" value="Skicka" class="btn btn-primary" /> 
         </div> 
        </div> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

Controller:

using System.Web.Mvc; 
using System.Data; 
using System.Data.SqlClient; 
using Barndomshem.Models; 


namespace Barndomshem.Controllers 
{ 
    public class RapportController : Controller 
    { 
     SqlConnection connection = new SqlConnection(@"Data Source=.\SQLExpress;Initial Catalog=Barndomshem;Integrated Security=True"); 
     SqlCommand command = new SqlCommand(); 
     SqlDataReader reader; 

     public ActionResult Index() 
     { 
      var user = new User(); 

      Session["UserName"] = user; 

      if (Session["UserName"] == null) 
      { 
       return RedirectToAction("/Rapport/Validate"); 
      } 

      return View(); 
     } 

     public ActionResult Validate(User user) 
     { 
      var query = command.CommandText = "SELECT Username FROM User"; 
      command.CommandType = CommandType.Text; 
      command.Connection = connection; 

      connection.Open(); 

      if (user.Username == query) 
      { 
       return RedirectToAction("/Rapport", user); 
      } 

      connection.Close(); 

      return View(); 
     } 
    } 
} 
+0

Eingangstyp Nehmen = Taste – CodeConstruct

+0

Wenn Sie die Authentifizierung und Autorisierung in asp.net lernen möchten, suchen Sie nach bitte in Blogs und YouTube-Videos. und lösche diese Frage. –

+2

Es gibt nichts in Ihrem Code, das einen Sinn ergibt. Wir empfehlen Ihnen dringend, auf die MVC-Site zu gehen und die Tutorials durchzulesen, um die Grundlagen zu erlernen. –

Antwort

4

Sie auf dem richtigen Weg sind, aber es gibt ein paar Probleme mit Ihrem Code, nämlich :

  • Die Ansicht ruft die Aktion Validate() im Controller nicht auf.
  • Ihre ADO.NET-Logik zur Verbindung mit der Datenbank ist völlig falsch.
  • Ihre SQL-Abfrage enthält keine WHERE-Klausel.
  • Sie verwenden nicht die von MVC bereitgestellten Authentifizierungsattribute und [Authorize].

Sie müssen die folgenden Änderungen an Ihrem Code machen:

1.Web.config:

1.1Add ein <connectionStrings> Element in der Web.config (unter <configuration>):

<connectionStrings> 
    <add name="ConnectionString" connectionString="Your connection string"/> 
    </connectionStrings> 

1.2Add <authentication> ein Element in der Web.Config (unter <system.web>):

<authentication mode="Forms"> 
    <forms loginUrl="~/Login/Index" timeout="2880" /> 
</authentication> 

2.Decorate Ihre Homecontroller mit [Authorize]

[Authorize] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

3.LoginController:

public class LoginController : Controller 
{ 
    [AllowAnonymous] 
    [HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Validate(User user) 
    { 
     try 
     { 
      string cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      using (var connection = new SqlConnection(cs)) 
      { 
       string commandText = "SELECT Username FROM [User] WHERE [email protected] AND Password = @Password"; 
       using (var command = new SqlCommand(commandText, connection)) 
       { 
        command.Parameters.AddWithValue("@Username", user.Username); 
        command.Parameters.AddWithValue("@Password", user.Password); 
        connection.Open(); 

        string userName = (string)command.ExecuteScalar(); 

        if(!String.IsNullOrEmpty(userName)) 
        { 
         System.Web.Security.FormsAuthentication.SetAuthCookie(user.Username, false); 
         return RedirectToAction("Index", "Home"); 
        } 

        TempData["Message"] = "Login failed.User name or password supplied doesn't exist."; 

        connection.Close(); 
       } 
      } 
     } 
     catch(Exception ex) 
     { 
      TempData["Message"] = "Login failed.Error - " + ex.Message; 
     } 
     return RedirectToAction("Index"); 
    } 
} 

4.Login Übersicht:

@model Barndomshem.Models.User 

@using (Html.BeginForm("Validate", "Login")) 
{ 
    <span>User Name</span> <input required="required" type="text" name="Username" /> <br /> 
    <span>Password</span> <input required="required" type="password" name="Password" /> <br /> 
    <input type="submit" value="Login" /> 
} 

@if (TempData["Message"] != null) 
{ 
    <span style="color:red;">@TempData["Message"].ToString()</span> 
} 

Lesen Sie auch den folgenden Artikel:

MVC forms authentication by Jon Galloway

+0

Ja das hat nicht geklappt. – Malphai

+0

Welcher Teil hat nicht geklappt, weil ich auf meiner Seite getestet habe und es gut funktioniert –

+0

Hi. Für mich funktionierte der Teil über das Autorize-Attribut über dem Home-Controller nicht. Ich habe den FormsAuthentication.SetAuthCookie gesetzt und doch, als ich zum Hauptindex umadressiert wurde, erhielt ich HTTP-Fehler 401.0 - nicht autorisiert. Was vermisse ich? Vielen Dank –