J'essaie d'utiliser Google Oauth2 API pour mon système de connexion. Il fonctionne presque, les utilisateurs donnent accès à mon application Web, j'ai lu des infos et connectent les utilisateurs. Le problème est, une fois qu'ils laissent ou changent de navigateur, récupérez-vous sur mon site Web à nouveau de donner accès.
Je n'ai pas besoin d'un accès hors ligne car je n'utilise aucun appels d'API autre que de vérifier l'utilisateur. Quoi qu'il en soit, je suis coincé et avez besoin d'aide là-bas! P>
J'utilise la bibliothèque de Google PHP (https://code.google.com/p/google-api-php-client/wiki/oauth2) et j'ai même défini l'approbationPrompte à l'automobile. Toujours pas de chance. P>
My Code: P>
public function googleLogin() { $this->set('connect', "Google login"); $client = new apiClient(); $client->setApprovalPrompt('auto'); $client->setApplicationName("Authentication"); $client->setClientId(G_OAUTH2_APP_ID); $client->setClientSecret(G_OAUTH2_SECRET); $client->setRedirectUri(G_REDIRECT_URI); $client->setDeveloperKey(G_DEV_KEY); $oauth2 = new apiOauth2Service($client); if (isset($_GET['code'])) { $client->authenticate(); $_SESSION['token'] = $client->getAccessToken(); $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); } if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); } if (isset($_REQUEST['logout'])) { unset($_SESSION['token']); $client->revokeToken(); } //print_r($client->getAccessToken()); exit; if ($client->getAccessToken()) { $user = $oauth2->Guserinfo->get(); // These fields are currently filtered through the PHP sanitize filters. // See http://www.php.net/manual/en/filter.filters.sanitize.php //$email = filter_var($user['email'], FILTER_SANITIZE_EMAIL); //$img = filter_var($user['picture'], FILTER_VALIDATE_URL); // The access token may have been updated lazily. $_SESSION['token'] = $client->getAccessToken(); //do stuff with user data $data = $this->linkUser($user, "google"); if ($data['state']=="createUser") { $this->set("data",$data); } } else { $authUrl = $client->createAuthUrl(); header("Location: " . $authUrl); } }
5 Réponses :
Vous devez enregistrer le jeton d'actualisation Vous obtenez la première fois que l'utilisateur accède à votre application dans une base de données et réutilisez-la pour les demandes futures. P>
La documentation Google Drive SDK comprend un exemple d'application PHP qui implémente ce flux et que vous pouvez utiliser comme référence: P>
Le but est que je n'ai pas besoin de faire des demandes futures: d'abord, l'utilisateur signe à l'aide de Google, de subventionner l'accès à mon application et je récupérez les infos comme un courrier électronique pour créer un accompagnateur si cela n'existe pas. Maintenant, nous avons un utilisateur enregistré. Disons que cette déconnexion utilisateur revenait ensuite sur mon site Web et cliquez sur "Connexion avec Google", il est invité à accorder une fois de nouveau accès. Comment puis-je relier le jeton d'actualisation à un utilisateur qui n'est plus connecté?
Qui est expliqué dans développeurs.google.com/drive/Credentials et développeurs.google.com/drive/examples/php#authorisation
J'ai vérifié les deux liens essayant de comprendre ce qu'ils font que je ne le fais pas. Je dois être aveugle ou manque quelque chose de crucial. Je vois qu'il y a une fonction $ Authhandler-> VerifyAuth (); bon ressemble à ce qu'ils font quelque chose d'intéressant là-bas ... et rien de nouveau: ils ont vérifié pour l'autorisation_code et s'il échoue, vérifiez les données en $ _session, ce qui signifie que cette application signifie cette application. Demandez à l'accès à chaque signe. Pourquoi ce n'est pas aussi simple que le système Facebook ... L'utilisateur donne accès une fois et vous êtes prêt à partir: O
Je crois que votre problème est que vous ne stockez aucun cookies sur l'ordinateur des utilisateurs. Les sessions stockent uniquement les informations pour la durée de la durée de l'utilisateur sur le site Web. P>
C'est une bonne explication simple sur les cookies. J'espère que cela aide. P>
Eh bien, cela pourrait aider mais je pense que ce n'est pas la bonne façon. La question au plus sera retardée. Une fois que les cookies sont effacés (expirez ou supprimé par l'utilisateur), le consentement sera à nouveau invité: <
Je pourrais me tromper, mais les cookies sont de ce que je comprends, le seul moyen de maintenir une session continue. Sauf si google vous permet d'utiliser ses cookies. Je ne suis pas sûr cependant. Je n'ai pas beaucoup joué avec l'API de Google.
J'ai eu un problème similaire qui semble être résolu d'éliminer $ client-> révocétank (), de déplacer les trucs de déconnexion avant le login.
Je ne sais pas si vous évitez d'invalider le jeton est une idée valide ou non , mais il semble fonctionner. p>
Essayez avec celui-ci: p>
J'utilise la même bibliothèque PHP OAuth pour Google Analaytics. Si un jeton d'accès a expiré, utilise-t-il automatiquement le jeton de rafraîchissement? J'accède toujours à l'API et je sais que le jeton d'accès que j'ai stocké a expiré. Je suppose qu'il utilise le jeton de rafraîchissement, si oui, comment puis-je stocker le nouveau jeton d'accès?
sur une autre question ici: API Google - Forces d'accorder la permission chaque temps p>
Quelqu'un a souligné que vous pouvez faire ceci: p>
$ client-> SetAppovalPromptPrompt ('auto'); code> p>
Définir l'accès hors connexion. Conservez le jeton initial et rafraîchissez le jeton pour chaque utilisateur qui authentifie alors, peu importe où l'utilisateur se connecte à votre application à partir de laquelle ils seront toujours connectés à leur compte Google, même s'ils ne sont pas directement connectés à Google lui-même, ils seront connectés à Google. via votre application. p>
Comme ci-dessus, ceci est couvert dans la documentation. P>
Il serait inutile d'avoir des API si les utilisateurs ne pouvaient jamais faire cela. En outre, ce n'est rien à voir avec des biscuits et des sessions. Ajoutez l'adresse IP du serveur à la console Google Developer et tout ira bien. P>
J'ai le même problème et je ne suis pas en mesure de trouver une solution appropriée pour cela, si je tourne cela pour déconnecter, cela donne une erreur lorsque mon jeton expire et si je fais cette méthode, cela ne fonctionne que jusqu'à ce qu'il ne ferme pas son navigateur