Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer
Artiklar > ASP.NET 1.x och 2.x

Enkel inloggning med validationskontroll

I denna artikel kommer jag att gå igenom hur man kan skapa en inloggning i ASP.NET (C#). Jag rekomenderar starkt att du går igenom min tidigare artikel om hur man installerar VWD med MySQL om du ska jobba med MySQL och inte har installerat allt än. Har du gjort det så är det bra.

Kom ihåg att i denna artikel kallar jag connection-strängen som är sparad i Web.config för connectionstring.

Skapa formuläret

Nu ska vi skapa självaste formuläret som ska hjälpa oss med inloggningen:

<asp:Label ID="loginLabelOff" runat="server" Visible="true">



   <asp:Label ID="formLoginUserLabel" runat="server" Text="Användarnamn:" /><br />

   <asp:TextBox ID="formLoginUser" runat="server" TextMode="SingleLine" /><br />

   <asp:Label ID="formLoginPassLabel" runat="server" Text="Lösenord:" /><br />

   <asp:TextBox ID="formLoginPass" runat="server" TextMode="Password" /><br />

   <asp:Button ID="formLoginButton" runat="server" Text="Logga in" /><br /><br />

Märk även att jag skapade några labels som ska beskriva för användaren att det är ett användarnamn och ett lösenord som ska skrivas i fälten. Märk väl att vi har lagt allt i en label som vi kallar för loginLabelOff, det är den informationen som man kommer att se om man är utloggad, den har vi satt till synlig (visible="true"). Stäng INTE den labeln än, vi ska fortsätta koda nedan.

Lägg in kontrollerna

Det vi ska göra nu är att vi ska slänga in två kontroller som ser till att fälten innehåller värden innan man kan gå vidare med inloggningen. Till det kommer vi att använda RequiredFieldValidator som helt enkelt ser till att ett värde finns i fälten.

   <asp:RequiredFieldValidator ID="loginFormUserValidator" runat="server" ErrorMessage="Ange ett användarnamn" ControlToValidate="formLoginUser" SetFocusOnError="true" /><br /> 

   <asp:RequiredFieldValidator ID="loginFormPassValidator" runat="server" ErrorMessage="Ange ett lösenord" ControlToValidate="formLoginPass" SetFocusOnError="true" />





</asp:Label>

Så, vad hände där? Jo jag ska förklara allt för dig:

  1. Först skapade vi objektet RequiredFieldValidator med varsit ID som i detta fall är likt formulärens ID, fast jag lade till Validtor i namnet så man ska märka skillnaden mellan dem. Ex loginFormUserValidator.
  2. Sedan angav vi vad felmeddelandet ska vara när man inte fyllt i fältet, t.ex. Ange ett användarnamn
  3. Efter det kommer en viktig grej, och det är ControlToValidate. Det attributet frågar oss "vilket fält ska jag kontrollera?", då skriver man in ID på det fältet som ska kontrolleras.
  4. SetFocusOnError är en frivillig grej, jag ville bara visa det. Det sätter focus på formuläret som inte har blivit ifyllt.

Kom ihåg att jag nu stängde labeln loginFormOff. Nu är det dags att skapa den labeln som ska synas när man är online istället:

<asp:Label ID="loginLabelOff" runat="server" Visible="false">Du är inloggad</asp:Label>

Den labeln gör vi osynlig (visible="false").

C# Koden

Nu ska vi skapa koden som ska sköta inloggningen, men innan det måste vi koppla knappen till metoden som vi ska skapa. Modifiera knappkoden ovan till följande:

<asp:Button ID="formLoginButton" runat="server" Text="Logga in" OnClick="formLoginButton_OnClick" />

Det vi gjorde är att när man klickar på knappen så ska metoden/funktionen formLoginButton_OnClick() aktiveras. Det är den funktionen som vi ska jobba med här.

Kod:
protected void formLoginButton_OnClick(Object sender, EventArgs e)
{
  MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["connection"].ConnectionString);
  MySqlDataReader dReader;

 
using (connection)
 
{
   
String hashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(formLoginPass.Text, "MD5");
   
String mySQL = "SELECT memID FROM tblMembers WHERE memUsername = ?Username AND memPassword = ?Password AND memActive = 1";
   
MySqlCommand cmd = new MySqlCommand(mySQL, connection);
   
cmd.Parameters.Add("?Username", MySqlDbType.VarChar, 15).Value = formLoginUser.Text;
    cmd.Parameters.Add("?Password", MySqlDbType.VarChar, 15).Value = hashedPassword;
   
connection.Open();
    dReader = cmd.ExecuteReader();
   
   
if (dReader.Read())
   
{
     
Session["online"] = "1";
     
loginLabelOn.Visible = true;
     
loginLabelOff.Visible = false;
    
}
   
else
   
{
     
Session["online"] = "0";
     
loginLabelOn.Visible = false;
     
loginLabelOff.Visible = true;
   
}

   dReader.Close();
  
connection.Close();
}

Ojojoj, nu vart det mycket kod här. Men lugn, det mesta är logiskt, det är bara i början som man måste hänga med, resten är lungt ;)

  1. Jag började med att hämta connection-strängen från Web.config och lagrade den i en variabel som jag kallade för connection.
  2. Efter det så deklarerade jag variabeln som ska jobba som en läsare (gamla Recordset), dReader
  3. Sen gjorde jag något som är frivilligt och absolut inte ett måste, jag ville bara visa dig hur man gör. Jag "hashade" lösenordet med MD5 och lagrade det i en variabel som jag kallade för hashedPassword.
  4. Efter det skapade jag SQL raden och sparade den i en variabel som jag kallar för mySQL. Ser du att jag skriver ?Username istället för att jag skickade in värden från formuläret direkt där. Varför, det förklaras senare ;)
  5. Sedan skapade jag ett MySQL kommando som ska hantera SQL-raden med hjälp av kopplingen.
  6. Nu kommer vi till något som är fiffigt och bra med ASP.NET. Här skickar jag in de värdena som ska in i SQL raden där ?Username och ?Password.
    cmd.Parameters.Add("?Username", MySqlDbType.VarChar, 15).Value = formLoginUser.Text;

    Först markerar vi att det är ?Username som du ska ifylla, sedan bestämmer vi typen av värdet som ska in, och i detta fall är det Varchar, och så har jag specifierat längden till 15. Sen säger vi att värdet som ska in där är texten som är ifylld i formLoginUser.
    Det som är bra med detta är att det helt och håller skyddar mot SQL-injections, så du behöver inte ens tänka på detta!
  7. Sedan öppnar vi kopplingen med connection.Open();
  8. Och nu är det dags att skapa läsaren som ska hämta informationen (i klassisk asp kallade vi den för Recordset).
    dReader = cmd.ExecuteReader();
  9. Sen kontrollerar vi ifall den hittade något med if(dReader.Read()), resten förklarar sig självt ;)

Slutord

Detta är en mycket enkel inloggningsfunktion, det ser mycket ut, men när du har lärt dig den så kommer du att gilla den och inse att det mesta är ganska logiskt.
Kom ihåg att du måste själv hålla koll på ifall användaren är online eller inte, det kan du göra på många olika sätt, bl.a. genom sessions. Jag ska försöka skriva en artikel om det senare.

Lycka till!

Skapades: 2007-08-27 22:02:07
Skribent: Shadi
Lästs 1119 gånger
Betyg: 1 (artikeln har endast 1 röster, det krävs minst 5 för ett betyg)

Kommentarer

Ingen har kommenterat denna artikel än.

© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy