[oo] Authentication: doe ik het correct?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

- Raoul -

- Raoul -

04/12/2012 13:57:40
Quote Anchor link
Hoi,

Onderstaand kun je m'n implementatie vinden voor authenticatie, mijn vraag is, wat denken jullie hier van? Enige verbeteringen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$authentication
= new UserAuthentication(Database::getInstance());
$authentication->setUsername($form->getUsername()->getPostedValue());
$authentication->setPassword($form->getPassword()->getPostedValue());

if ($authentication->authenticate())
{

    User::login($authentication); // vervolgens op te halen met User::getUser();, returnt een nieuw user object met de id van de authenticatie.

    header('Location: /');

    exit;
}

else
{
        $form->getUsername()->addMessage('Controleer je gebruikersnaam en/of wachtwoord.');
}


?>


Raoul
 
PHP hulp

PHP hulp

20/05/2024 23:34:07
 
Michel Falke

Michel Falke

04/12/2012 16:19:23
Quote Anchor link
Mag ik vragen waarom je een singleton als constructor parameter meegeeft aan de UserAuthentication? Verder kan ik er niet veel over zeggen, want ik zie nergens de klasses terug :)
 
- Raoul -

- Raoul -

04/12/2012 17:41:37
Quote Anchor link
De classes hoef ik ook niet echt posten want het gaat om de code die je hierboven ziet. UserAuthentication::authenticate() kijkt in de db of het lid bestaat met de username en password en returnt dan true of false.

Vervolgens word in User::login(UserAuthentication $auth) de sessie aangemaakt in de database en wordt er dan vervolgens ook een cookie aangemaakt.

Raoul
Gewijzigd op 04/12/2012 17:41:57 door - Raoul -
 
Appel Taart

Appel Taart

04/12/2012 20:53:44
Quote Anchor link
Authentication is het vaststellen van iemand identiteit, kijken of hij echt is
wie hij zegt dat hij is.
In webapplicaties gebeurt dit vaak via een username/wachtwoord combinatie maar er zijn ook andere
opties (gebruiker opent link vanuit email en is direct ingelogd, gebruiker heeft een inlog-onthouden coockie, etc).

Deze drie manieren van inloggen (userpassword, email, coockie) moeten allemaal ondersteunt worden
door de authenticator. Hoe doen we dat?

De gegevens waarmee een gebruiker inlogt zijn dus niet altijd hetzelfde, soms wachtwoord, soms een email-token.
Daarom maken we een apparte abstrace klasse Credentials. Voor elke van de inlogwijze maken we dan een concrete klasse
UsernamePasswordCredentials, EmailTokenCredentials, RememberMeCredentials.

Dan nu de Authenticator it self. Deze bevat 1 methode autenticate(Credentials $credentials) die kan zeggen
of de gegevens geldig zijn. Indien deze gegevens geldig zijn geeft deze methode een AuthToken object terug zodat
bij een volgend page request de gebruiker niet opnieuw zijn inloggegevens nodig heeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
interface Credentials {
    public function getCredentialsAsArray();
}


class UsernamePassword implements Credentials {}
class EmailToken implements Credentials {}

class AuthToken implements Credentials {
    protected $validUntil; // DateTime
    protected $createdAt; // DateTime
    protected $token;
    
    public function __construct($token, $validUntil, $createdAt = null) {
        $this->token = $token;
        $this->validUntil = $validUntil;
        if($createdAt === null) {
            $this->createdAt = new DateTime("now");
        }
else {
            $this->createdAt = $createdAt;
        }
    }

    
    public function isValid() {
        // check of geldigheidstijd nog niet verstreken is
    }
}


interface Authenticator {
    public function authenticate(Credentials $credentials);
    public function setAuthTokenMapper(Mapper $mapper);
    public function checkToken(AuthToken $token);
}


class UserAuthenticator implements Authenticator {
    protected $authTokenMapper;
    
    public function setAuthTokenMapper(Mapper $mapper) {
        $this->authTokenMapper = $mapper;
    }


    public funciton authenticate(Credentials $credentials) {
    
        if($credentials instanceof AuthToken) {
            return $this->checkToken();
        }

        elseif($credentials instanceof UsernamePasswordCredentials) {
            // check username/password combo
            // als geldig dan:

            return $this->createToken();
 
        }
elseif($credentials instanceof EmailToken) {
            // do other stuff
            // als geldig dan:

            return $this->createToken();
        }
else {
            throw new Exception( sprintf("Unsupported credential type: %s", get_class($credentials)) );
        }
    }

    
    protected function checkToken(AuthToken $token) {
        if($this->authTokenMapper->find($token) === false)
        {

            return false;
        }

        else {
            return $token->isValid();
        }
    }

    
    protected function createToken() {
        $authToken = new AuthToken("blablarandomrandom", new DateTime("tomorrow");
        $this->authTokenMapper->save($authToken);
        return $authToken;
    }
}

[
/code]
Gewijzigd op 04/12/2012 20:55:13 door Appel Taart
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.