Google Account Authentication in PHP
Ik wil in mijn web app graag dat gebruikers kunnen inloggen met hun Google account. Googles "Federated Login" ( http://code.google.com/apis/accounts/docs/OpenID.html ) werkt met een redirect naar google of een popup maar dat wil ik niet. Ik heb deze class geprobeerd: http://www.andrewpeace.com/php-google-login-class.html (werkt met redirect). Omdat ik in de database natuurlijk gegevens aan de google gebruiker wil koppellen heb ik iets nodig dat permanent blijft (zoals username of een permanent ID) maar dat blijkt onmogelijk met de Federated Login.
Ook OAuth werkt met een redirect, hoewel dat al wel iets beter is als de OpenID methode...
Ik zoek dus een Class waarmee ik gebruikers kan laten inloggen met hun Google account (zonder redirect/popup), want ik denk dat het vast al een keer eerder is gemaakt :) Suggesties?
Alvast bedankt.
Gewijzigd op 01/01/1970 01:00:00 door Bartx
heeft Google daar niet een API voor?
Jawel, maar ik zie er niet een die zonder redirects/popups werkt. Of mis ik iets?
Code (php)
Geeft:
array(3) {
["code"]=>
int(403)
["cr"]=>
string(24) "Error=BadAuthentication
"
["ce"]=>
int(0)
}
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door Bartx
Ja?
Klaasjan Boven schreef op 18.11.2009 19:55:
Ja?
eeeeeh?
Ja, dat werkte dus niet...
Ik vond het hier: http://blog.saush.com/2009/04/25/third-party-user-authentication-with-ruby-in-a-just-few-lines-of-code/ en herschreven van Ruby naar PHP... maar werkt dus niet, maar waarom? :) ..
Edit:
volgens google krijg je het als je POST verkeerd format:
http://code.google.com/support/bin/answer.py?hl=en&answer=64263
ben nu wel benieuwd wat wel een goede format is dan..
Edit2:
Heb deze code gevonden, die ga ik nu proberen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = array('accountType' => 'GOOGLE',
'Email' => '[email protected]',
'Passwd' => 'yourpassword',
'source'=>'PHI-cUrl-Example',
'service'=>'lh2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$hasil = curl_exec($ch);
echo $hasil;
?>
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = array('accountType' => 'GOOGLE',
'Email' => '[email protected]',
'Passwd' => 'yourpassword',
'source'=>'PHI-cUrl-Example',
'service'=>'lh2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$hasil = curl_exec($ch);
echo $hasil;
?>
Gewijzigd op 01/01/1970 01:00:00 door Bartx
Bij OpenID is het openid zelf de constante. Dat is de gebruikersnaam van zo'n persoon, en die verandert niet. Bij OAuth krijg je als het goed is een soort code van de service, die geldig blijft zolang de gebruiker bij de service aangeeft dat hij niet ingetrokken hoeft te worden.
OpenID is vooral voor het inloggen. 1 keer inloggen op meerdere sites, omdat de openid-provider je niet bij iedere website gaat vragen om opnieuw je wachtwoord in te voeren, en voor je onthoudt of je ingelogd blijft op die site. Leuke is dat dit ook mooi in de browser geïntegreerd kan worden (Firefox deed het even als preview in Weave)
OAuth is meer gericht op applicaties en webapps die gebruik willen maken van userdata bij aanbieders zoals facebook en twitter. Je kan ermee aangeven dat een programma onder jouw naam dingen mag opvragen of plaatsen.