Login Class
Ik ben druk bezig met OOP te leren, met classes enzo...
Vandaag maakte ik een loginclass, alleen weet ik niet of ik wel op de goeie weg ben.
De databaseclass heb ik niet zelf gemaakt, maar komt hierhier vandaan.
Het script:
Code (php)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
# User Class
class User
{
public $error = array();
private $userID;
private $username;
private $password;
public function __construct(Database $db){
$this->_db = $db;
}
public function Checkban()
{
# Kijken of de gebruiker nog een ban heeft,
# Of de ban al vervallen is..
}
public function CheckPass($pass, $mail, $password)
{
# Pass is de versleuteld ww van database
# Mail is het mailadres van de gebruiker
# Passwoord is de niet versleutelde, raw wachtwoord.
$password = ''.$password.''.$salt.''.$mail.'';
$this->success = ($pass == $password) ? True : False;
}
public function makeSession()
{
# Nieuwe sessie in database
# Cookies plaatsen
}
public function lastactif()
{
# We gaan hier last_actif in de database updaten.
}
public function logout()
{
# Hier gaan we de sessie in database verwijderen
# Ook worden de cookies 'verwijderd'
}
public function checklogin() {
# Kijken of de gebruiker ingelogd is.
}
public function Login($username, $password)
{
if (!empty($username) OR !empty($password))
{
$username = $this->_db->escape($username);
$params = array($username);
$results = $this->_db->rawQuery("SELECT * FROM leden WHERE username = ?", $params);
$this->Checkpass($results['0']['password'], $results['0']['mail'], $password);
if($this->success) {
echo 'Ok';
}
else {
echo 'U hebt een verkeerd wachtwoord ingevuld.';
echo $password;
}
}
else
{
echo 'Geen gebruikersnaam of wachtwoord ingevuld.';
}
}
}
?>
# User Class
class User
{
public $error = array();
private $userID;
private $username;
private $password;
public function __construct(Database $db){
$this->_db = $db;
}
public function Checkban()
{
# Kijken of de gebruiker nog een ban heeft,
# Of de ban al vervallen is..
}
public function CheckPass($pass, $mail, $password)
{
# Pass is de versleuteld ww van database
# Mail is het mailadres van de gebruiker
# Passwoord is de niet versleutelde, raw wachtwoord.
$password = ''.$password.''.$salt.''.$mail.'';
$this->success = ($pass == $password) ? True : False;
}
public function makeSession()
{
# Nieuwe sessie in database
# Cookies plaatsen
}
public function lastactif()
{
# We gaan hier last_actif in de database updaten.
}
public function logout()
{
# Hier gaan we de sessie in database verwijderen
# Ook worden de cookies 'verwijderd'
}
public function checklogin() {
# Kijken of de gebruiker ingelogd is.
}
public function Login($username, $password)
{
if (!empty($username) OR !empty($password))
{
$username = $this->_db->escape($username);
$params = array($username);
$results = $this->_db->rawQuery("SELECT * FROM leden WHERE username = ?", $params);
$this->Checkpass($results['0']['password'], $results['0']['mail'], $password);
if($this->success) {
echo 'Ok';
}
else {
echo 'U hebt een verkeerd wachtwoord ingevuld.';
echo $password;
}
}
else
{
echo 'Geen gebruikersnaam of wachtwoord ingevuld.';
}
}
}
?>
Hier de 'aanroep' pagina:
Code (php)
Wat er momenteel ook niet lukt is kijken of de wachtwoorden gelijk zijn aan elkaar.
$password veranderd niet...
Is dit ook OOP genoeg?
Alvast bedankt
Diov
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
public function CheckPass($pass, $mail, $password)
{
# Pass is de versleuteld ww van database
# Mail is het mailadres van de gebruiker
# Passwoord is de niet versleutelde, raw wachtwoord.
$password = ''.$password.''.$salt.''.$mail.'';
$this->success = ($pass == $password) ? True : False;
}
?>
public function CheckPass($pass, $mail, $password)
{
# Pass is de versleuteld ww van database
# Mail is het mailadres van de gebruiker
# Passwoord is de niet versleutelde, raw wachtwoord.
$password = ''.$password.''.$salt.''.$mail.'';
$this->success = ($pass == $password) ? True : False;
}
?>
$salt komt hier letterlijk uit de lucht vallen, dus is gewoon leeg en je hoeft ook geen lege strings er aan te plakken, dat dient geen nut.
Als je een melding toont bij het inloggen, geef je nooit aan 'U hebt een verkeerd wachtwoord ingevuld.' want dan weet je dat de username wel klopt.
Zou je password encrypte.
Tegenwoordig hebben veel website's bij het registeren van een nieuwe gebruiker eisen aan het wachtwoord (minimaal 1 hoofdletter, etc.), als je dit ook heb kan je hierop controleren.
@ Erwin, ik heb de fout gevonden. Was beetje dom van mij...
De $salt zat in de config file, dusja ...
@ Lendl, heb de error berichten aangepast.
De wachtwoorden zijn geëncrypted met een salt en pepper. Vervolgens sha1
Misschien binnenkort is bcrypt proberen!
Zijn die niet hetzelfde?
Of is $pass de opgeslagen string in de database?
zoiets in ieder geval, ben alles behalve een OOP'er
Ik stuur het wachtwoord die versleuteld is, mee.
En het 'raw' wachtwoord die niet versleuteld is.
@ Jeroen,
Ik vind het ook niet echt een goeie OOP class,
Het is ook nog maar mijn eerste class (die werkt :p).
Heeft er misschien iemand zo'n script waar ik wat uit kan leren? Dingen kan overnemen, etc. ?
Dat hij het doet betekent niet dat hij ook oop is. Echo in een klasse is bijv niet goed je kan beter waardes returnen en waar je het gebruikt echoen op deze manier is je code namelijk niet flexibel mijn advies is om je klasse eerst op papier uit te tekenen en de vereiste taken die je wilt uitvoeren uit elkaar halen zodat elke klasse maar een taak heeft vervolgens geef je elke klasse methoden die jij denkt dat deze die methoden nodig heeft en wanneer dit gebeurd is ga je alles programmeren.
Je mag geen loginprocedures als methodes in je user-klasse maken. Want je moet zo denken: inloggen is een actie die door en niet op een gebruiker uitgevoerd wordt. Methodes zijn acties die op het (contextueel) object uitgevoerd worden.(Of toch vaak). Hoe ik denk dat je het beste werkt: maak een user klasse en een session klasse. Session erft van user. (dan moet je enkel een sessionID of token meegeven om alle gegevens op te vragen). De juiste procedure (inloggen, checken, uitloggen,...) Laat je analyseren en beslissen door een controller. Die gaat kijken in wat voor situatie je zit en bepaalt zo welke procedure er uitgevoerd moet worden. Bijv: De controller merkt dat er geen sessie geset is ($_SESSION), zoniet gaat hij dus hij kijken of er een gebruikersnaam en wachtwoord geset is (om in te loggen), zoniet onderneemt hij actie om een loginformulier te weergeven, indien wel probeert hij in te loggen. Snap je wat ik bedoel? Een procedure kan je beschouwen als een klasse met de vaste methode execute() die door de controller aangeroepen wordt. En uiteindelijk is het de procedure klasse die de user en session klasse GEBRUIKT. Is het een beetje duidelijk zo?
Die controller lijkt wel interessant maar ik vind er niet echt veel over.
Heeft misschien iemand een voorbeeld + ook de werking ervan?
De Session Klasse, wat doet die? Sessies plaatsen? Verwijderen?