2014-03-25 14 views
13

Ich arbeite an einer Symfony2-App. Ich verwende FOSUserBundle, um die Authentifizierung zu handhaben, und habe es kürzlich mit FOSUserBundle integriert, indem ich dieses Tutorial nutze: https://gist.github.com/danvbe/4476697.HWIOAuthBundle Google-Anmeldung Geräte-ID und Gerätename für eine Webanwendung

Das Problem ist: Ich kann mit der Google API auf Localhost anmelden und alles funktioniert gut.

aber wenn ich versuche, auf einem realen Server einzuloggen, erhalte ich:

Error: invalid_request 

device_id and device_name are required for private IP: http://<server_ip>/login/check-google 

Details anfordern:

response_type=code 
scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile 
redirect_uri=http://<server_ip>/login/check-google 
client_id=<my_id> 

Dokumente Google nicht über diese beiden Parameter nennen. Ich habe versucht, eine Anfrage manuell zu senden, wobei device_id eine UUID und device_name auf "notes" gesetzt ist. Die Antwort, die ich diesmal bekommen ist:

Error: invalid_request 

Device info can be set only for native apps. 

Details anfordern:

cookie_policy_enforce=false 
response_type=code 
device_name=notes 
scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile 
redirect_uri=http://<server_ip>/login/check-google 
device_id=4b3403665fea6 
client_id=<my_id> 

Nun, was mache ich falsch?

+0

Neben localhost, enthält Ihre clientID, Ihren Server (per IP-Adresse)? cloud.google.com/console –

Antwort

1

Es sieht wirklich so aus, als ob Sie den falschen Geschmack von oauth verwenden. device_id wird mit Devices verwendet. Ich würde wirklich erwarten, dass Sie den WebServer Flow verwenden. Möglicherweise benötigst du einen der anderen Flüsse, da ich hier nicht genug Details sehe, um sie zu beurteilen, aber sie können alle unter den Links gefunden werden.

+0

Btw - die Client-Bibliothek für PHP finden Sie unter https://code.google.com/p/google-api-php-client/wiki/OAuth2 –

3

Google akzeptiert keine lokale (private) IP-Adresse, wenn Oauth- oder API-Aufrufe ausgeführt werden. Meine Abhilfe war einen Eintrag in meinem Windows-Rechner für die lokalen IP-Datei hinzuzufügen:

\Windows\System32\drivers\etc

192.168.1.2 fakedomain.com 

dann in ihrer dev Konsole mit Google registrieren. Das erscheint ihnen als eine "echte" Domain, wird aber immer noch in Ihrem Browser oder Code auf die lokale IP Adresse auflösen. Ich bin sicher, dass ein ähnlicher Ansatz auf Mac oder Linux auch funktionieren würde.