Toon posts:

[ZF] prefilled zend_auth login is niet persistent

Pagina: 1
Acties:

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 08:44
Ik heb een probleem met mijn in zend framework gebouwde website. Al een tijd lang heb ik een afgeschermd gedeelte in de site, waarbij de authenticatie via zend framework gaat.
Dit werkt prima, er is ook weinig ingewikkelds aan, na de login form komt men in onderstaand stukje code. Bij een succesvolle login volgt nog een forward naar een andere action


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
//Voer authenticatie uit tegen database
        $db = Zend_Registry::get('db');
        $values = $form->getValues();
        
        //Maak auth adapter aan voo db table
        $authAdapter = new Zend_Auth_Adapter_DbTable($db,'st_user','u_username','u_password','MD5(?)');
        $authAdapter
            ->setIdentity($values['user'])
            ->setCredential($values['password']);

        //Voer authenticatie uit
        $auth    = Zend_Auth::getInstance();
        $result  = $auth->authenticate($authAdapter);
        
        if (!$result->isValid()) {
            // Invalid credentials, render de form opnieuw

            $form->setDescription('Login failed');
            $this->view->form = $form;
            return $this->render('index'); // re-render the login form
        } else {
        //Authenticatie succesvol! Sla extra gegevens uit de db row op in de sessie voor gebruik in andere delen van de applicatie      
            $storage = $auth->getStorage();
            $storage->write($authAdapter->getResultRowObject(array(
                'u_id',
                'u_pref_currency_id',
                'u_username',
                'u_active',
                'u_confirmed'
            )));



Nu heb ik onlangs en stuk bijgebouwd waardoor gebruikers ook kunnen inloggen via twitter, facebook, linkedin of google. Hierbij maak ik gebruik van OAuth en Openid. De authenticatie bij de 3th parties gaar prima. Wat ik daarna doe is van bijvoorbeeld linkedin het emailadres opvragen, vervolgens zoek ik de gebruiker met dat email adres er bij in mijn eigen database.

Als dat gelukt is wil ik zend auth vertellen dat deze gebruiker ingelogd is. Ik haal daarvoor nu een "truc" uit door zend auth de username en wachtwoord te geven die ik net uit de db heb opgehaald, maar deze keer zonder hash functie.

Hierdoor krijg je dus vrijwel hetzelfde als boevnstaand:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Maak auth adapter aan voor db table
                $authAdapter = new Zend_Auth_Adapter_DbTable($db,'st_user','u_username','u_password');
                $authAdapter
                    ->setIdentity($userdetails->u_username)
                    ->setCredential($userdetails->u_password);
        
                //Voer authenticatie uit
                $auth    = Zend_Auth::getInstance();
                $result  = $auth->authenticate($authAdapter);
                
                //Sla extra gegevens uit de db row op in de sessie voor gebruik in andere delen van de applicatie       
                    $storage = $auth->getStorage();
                    $storage->write($authAdapter->getResultRowObject(array(
                        'u_id',
                        'u_pref_currency_id',
                        'u_username',
                        'u_active',
                        'u_confirmed'
                    )));


Ook dit werkt prima, maar het vervelende is dat je wanneer je nu van deze login methode gebruik alleen maar ingelogd bent in je huidige tabblad van de browser. Open je een nieuw tabblad en ga je weer naar de site, dan zie deze je weer als niet ingelogd (terwijl de eerste tab gewoon netjes ingelogd blijft).

Ik zie in de cookies ook dat er een 2e phpsesid wordt gegeven.

Iemand enige idee waar ik de fout in ga?

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Allereerst wil ik even kwijt dat md5 echt niet meer kan anno 2011, maar dat is een andere discussie.

In mijn ogen maak je een denkfout door 2 keer de DbTable auth adapter te willen gebruiken, want dit is gewoon een hack. Hiervoor zal je een andere, danwel een zelfgeschreven adapter moeten gebruiken die het OAuth gedeelte afhandeld.

Welnu, eindelijk ontopic:
- Welke browser gebruik je?
- Maak een lege pagina, gebruik Zend_Session en kijk of hij dan wel in beide tabs werkt.

  • Cartman!
  • Registratie: April 2000
  • Niet online
Het hele mooie aan OAuth & OpenId is dat jij geen username/password hoeft op te slaan, ga er dan niet omheen werken. Je hoeft alleen een eigen adapter te maken die de login controleert bij de 3e partij, in t geval van OpenID krijg je een url terug (het OpenID) waarop je in je tabel kunt zoeken, vind je een hit dan is die record ingelogd. Bij OAuth kun je t best met userid's werken omdat de username niet perse vast is. Daarvoor geldt t zelfde, sla lekker het netwerk+userid op van iemand en probeer daar een hit op te vinden.

Eens met ReenL: MD5 kan echt niet meer, pak op z'n minst SHA256 met een salt imo.

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 08:44
Cartman! schreef op dinsdag 09 augustus 2011 @ 08:35:
Het hele mooie aan OAuth & OpenId is dat jij geen username/password hoeft op te slaan, ga er dan niet omheen werken. Je hoeft alleen een eigen adapter te maken die de login controleert bij de 3e partij, in t geval van OpenID krijg je een url terug (het OpenID) waarop je in je tabel kunt zoeken, vind je een hit dan is die record ingelogd. Bij OAuth kun je t best met userid's werken omdat de username niet perse vast is. Daarvoor geldt t zelfde, sla lekker het netwerk+userid op van iemand en probeer daar een hit op te vinden.

Eens met ReenL: MD5 kan echt niet meer, pak op z'n minst SHA256 met een salt imo.
Goed idee, door een eigen zend_auth_adapter te maken en het twitter authenticate deel daar in af te handelen wordt in ieder geval mijn controller een stuk netter, bovendien ben ik dan van die lelijke hack af waar ik nu het username en wachtwoord door geef aan de standaard zend_auth. Ik ga daar eerst eens mee aan de slag.

Trouwens helemaal eens met het MD5 commentaar :)

[Voor 3% gewijzigd door AtlonXP1800 op 09-08-2011 21:22]



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee