ログインシステムに google oauth2 api を使用しようとしています。それはほとんど機能しており、ユーザーは私の Web アプリケーションへのアクセスを許可し、私は情報を読み、ユーザーを接続します。問題は、彼らがブラウザを離れるか変更すると、私のウェブサイトに戻ると、アクセスを許可するように再度求められることです。
ユーザーのチェックイン以外に API 呼び出しを使用していないため、オフライン アクセスは必要ありません。とにかく私は立ち往生していて、そこに助けが必要です!
Google php ライブラリ (https://code.google.com/p/google-api-php-client/wiki/OAuth2) を使用しており、ApprovalPrompt を auto に設定しています。まだ運がありません。
私のコード:
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);
}
}
編集:$client->setAccessType("online");
これが機能させるために必要な唯一のことなのか、それともブラウザー/OS間にバグがあるのか、まだわからない
行を追加しました:前回ライオン/クロームで試したときは機能しませんでしたでもw7/firefoxでは大丈夫です。まあ、これか私は単に私の心を失っています:p