Klein inlogsysteem

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • michaelw1998
  • Registratie: Oktober 2012
  • Laatst online: 08:47
Hi,

Ik ben bezig om een simpel inlogsysteem te maken in C# ASP.NET met WebForms. Ik heb hierbij zelf de code geschreven en maak niet gebruik van de authentication code die standaard meegeleverd wordt.
Het inloggen en registreren werkt prima, dit doe ik doormiddel van een SELECT (waarbij username veld gelijk is aan username in database en password veld gelijk is aan password in database). Het registerern gebeurd met een insert commando. Dit werkt allemaal prima, ook de foreign keys etc functioneren zoals het hoort.

Zodra iemand inlogt sla ik de username op in een cookie. Daarna stuur ik afhankelijk van de role (kolom in de database tabel van gebruikers) de gebruiker door naar de volgende pagina (deze pagina's probeer ik uiteindelijk te beschermen zodat je alleen als je ingelogd bent bij de pagina komt).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
protected void Button1_Click(object sender, EventArgs e)
        {
            string userName = Username.Text;
            bool loginState = ThisDAL.checkLogin(userName, Password.Text);
            string userRole = ThisDAL.checkRole(userName);

            if (loginState)
            {
                Label4.Text = "Succesvol ingelogd!";
                FormsAuthentication.SetAuthCookie(Username.Text, CheckBox1.Checked);
                if (userRole == "klant")
                {
                    Response.Redirect("WebFormMijnGegevens");
                }
                else if (userRole == "sdm")
                {
                    Response.Redirect("WebFormMedewerkers");
                }
                else
                {
                    Label4.Text = "Inloggen mislukt";
                }
                //FormsAuthentication.RedirectFromLoginPage(Username.Text, CheckBox1.Checked);
            }
            else
            {
                Label4.Text = "Inloggen mislukt";
            }
        }


Om nu te kijken of alles werkt plaatste ik op de WebFormMijnGegevens pagina de volgende code, om te kijken of ik de username mee kreeg. Dit lukte niet waarna ik ook checkte of de gebruiker authenticated is.

code:
1
Label4.Text = HttpContext.Current.User.Identity.IsAuthenticated + HttpContext.Current.User.Identity.Name;


Uiteraard is bovengenoemde niet voor in een werkende omgeving, het was puur om te testen of ik een waarde terug kreeg. De IsAuthenticated geeft een False.

Moet ik behalve de cookie bij het inloggen nog iets anders doen?

Ik ben 2e jaars student ICT en probeer zo veel mogelijk te leren door zelfstudie en door gewoon te doen. De basis hebben we in de les geleerd maar in- en uitloggen etc hebben we niet behandeld.

Een grote vereiste was het gebruik van een eigen SQL database server. Vandaar dat ik in het begin was afgestapt van de ingebouwde authentication methodes die je kunt aanvinken bij het maken van een project.

Ik hoop dat het zo een beetje duidelijk is wat ik wil.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:01

Haan

dotnetter

Als je wil weten hoe authenticatie in ASP.NET werkt, zou ik je met klem aanraden om niet zelf aan te gaan lopen modderen, want dat gaat toch nooit goed werken.
Kijk hoe het standaard wordt gedaan (en pak dan meteen iets moderners dan Webforms :X ). Je kan ook alle source code er bij pakken om precies te zien hoe alles in elkaar zit.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 19:48

Rannasha

Does not compute.

Je lijkt gebruik te maken van FormsAuthentication als authenticatie-methode. Deze moet je aanzetten in het configuratiebestand (web.config). Heb je dit gedaan?

Zie ook: documentatie.

Een ongerelateerde tip: Probeer je objecten vanaf het begin een echte naam te geven in plaats van Label4, CheckBox1, e.d. Dat maakt het een stuk eenvoudiger om later je code te kunnen lezen en eventuele fouten te vinden. Nu zul je zeggen dat het voor een klein projectje niet veel uit maakt, maar kleine projectjes worden groot en voor je het weet zit je telkens opnieuw door je code te zoeken of het nu CheckBox14 of CheckBox15 was die je nodig had voor een specifieke toepassing. Namen die duidelijk maken wat het doel van het object is, maken het leven makkelijker.

|| Vierkant voor Wiskunde ||


Acties:
  • 0 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
Haan schreef op donderdag 28 maart 2019 @ 15:17:
Als je wil weten hoe authenticatie in ASP.NET werkt, zou ik je met klem aanraden om niet zelf aan te gaan lopen modderen, want dat gaat toch nooit goed werken.
Kijk hoe het standaard wordt gedaan (en pak dan meteen iets moderners dan Webforms :X ). Je kan ook alle source code er bij pakken om precies te zien hoe alles in elkaar zit.
Aan de andere kant, zal ik nooit iemand afraden om te spelen met iets wat interessant lijkt. Daar kan je veel van leren. Uiteraard ben ik het met je eens om, tenzij je specialist bent, nooit je eigen loginsysteem te gebruiken in real life, maar het is hartstikke goed voor de ontwikkeling. Zeker als 2de-jaar student is de super-correcte, extensible bulletproof code die je in een echte lib zal vinden vaak slecht leesbaar. Om de basisprincipes te leren is zelfbouw dan best nuttig (bovendien doe je dan ook ervaring op in vele andere disciplines zoals SQL en algemeen webdev).

Overigens zou ik je ook adviseren om ipv Webforms naar .NET Core MVC te stappen, dan doe je een stuk meer actuele kennis op.

Acties:
  • 0 Henk 'm!

  • michaelw1998
  • Registratie: Oktober 2012
  • Laatst online: 08:47
Rannasha schreef op donderdag 28 maart 2019 @ 15:22:
Je lijkt gebruik te maken van FormsAuthentication als authenticatie-methode. Deze moet je aanzetten in het configuratiebestand (web.config). Heb je dit gedaan?

Zie ook: documentatie.

Een ongerelateerde tip: Probeer je objecten vanaf het begin een echte naam te geven in plaats van Label4, CheckBox1, e.d. Dat maakt het een stuk eenvoudiger om later je code te kunnen lezen en eventuele fouten te vinden. Nu zul je zeggen dat het voor een klein projectje niet veel uit maakt, maar kleine projectjes worden groot en voor je het weet zit je telkens opnieuw door je code te zoeken of het nu CheckBox14 of CheckBox15 was die je nodig had voor een specifieke toepassing. Namen die duidelijk maken wat het doel van het object is, maken het leven makkelijker.
Momenteel is dit de code (een deel ervan) van Web.config:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework"
      type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
      requirePermission="false"/>
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-KlantportaalGE-20190325091323.mdf;Initial Catalog=aspnet-KlantportaalGE-20190325091323;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/WebFormInloggen.aspx" defaultUrl="~/WebFormMijngegevens.aspx">
      </forms>
    </authentication>
    <compilation debug="true" targetFramework="4.6.1"/>
    <httpRuntime targetFramework="4.6.1"/>
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization"/>
        <add namespace="Microsoft.AspNet.Identity"/>
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt"/>
      </controls>
    </pages>
    <membership>
      <providers>
        <!--
          ASP.NET Membership is disabled in this template. Please visit the following link https://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template
        -->
        <clear/>
      </providers>
    </membership>


Ik had de connectionString al eens aangepast naar mijn eigen SQL string; maar iedere pagina begon met door te sturen naar "/Account/Login" met een error. Juist /account/login wil ik niet gebruiken, wel mijn eigen login pagina.
Ik las al eens iets over Membership maar in een Stackoverflow waarbij iemand net als ik een eigen SQL db gebruikt werd gezegd dat Membership dan niet nodig is. Daarom loop ik ook deels vast; het een dat ik op internet vind spreekt het andere weer tegen.

Ik zie nu wel direct dat ik bij het aanmaken Authentication en Entityframework uit had moeten zetten...


EDIT: We hebben zowel WebForms als MVC kort behandeld in de les. De insteek van de docent was dat MVC bijna alles voor je doet en WebForms niet. Juist om alles in de hand te hebben en om ook ervan te kunnen leren leek zelf programmeren mij beter en ook leuker.

[ Voor 3% gewijzigd door michaelw1998 op 28-03-2019 15:48 ]