我为我的网站编写了一个Google登录程序。用户需要使用他或她的特定学校gmail。但是,我遇到了一个问题。如果用户意外尝试使用不是他的学校电子邮件的另一个Gmail登录,该网站会警告他“你应该使用你的学校gmail”并将他带回登录页面。但是,如果他再次尝试点击“使用Google登录”(因为理想情况下他会选择正确的Google电子邮件地址),他以前的Google帐户的会话仍然在运行,甚至没有让他选择尝试他的其他Gmail帐户。我不确切知道该做什么...我会破坏会话吗?用户是否必须手动注销?这是错误处理代码。
unset($_SESSION['token']);
$authUrl = $client->createAuthUrl();
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('You need to login with your school Google account.')
window.location.href='http://websitename.com/login';
</SCRIPT>");
如果在销毁会话后,Google身份验证网址会将您直接重定向到您的重定向文件,则可能是因为不需要分配新的Google访问令牌。如果您不需要存储和重复使用相同的访问令牌,并希望用户每次使用Google进行身份验证时都要登录,则必须在使用后撤消令牌。
要撤消访问令牌,您必须执行以下行
$client->revokeToken();
此行为的示例代码如下:
$client->setAccessToken($access_token);
if (!$client->isAccessTokenExpired()) {
try {
$plus = new Google_Service_Plus($client); // starts google profile (plus) service
$me = $plus->people->get('me'); // saves account info
$email = $me->emails[0]->value; // email
$id = $me->id; // id
$name = $me->name->givenName; // name
$surname = $me->name->familyName; // surname
$client->revokeToken();
$user = updateUser($email, $name, $surname, $id, $pic, $shortener); // proprietary function
} catch (Google_Exception $e) {
abortLogin("couldn't check google profile details", true); // proprietary function
}
} else {
abortLogin("invalid token", true); // proprietary function
}
session_destroy();