Moh*_*ssi 7 php google-oauth google-api-php-client
我有一个 php 应用程序,它使用 OAuth2 对用户的帐户进行身份验证。
直到昨天,一切都进展顺利。
但是今天,在不更改代码的情况下,当我尝试访问我的帐户时,并且在对我的谷歌帐户进行身份验证后,我获得了一个空白页面。
我调试代码,发现当 Google_Client 尝试 verifyIdToken 时崩溃,更准确地说是在函数 verifySignedJwtWithCerts 中,因为:$segments = explode(".", $jwt);找到 4 个段而不是 3 个段。
这是我的代码:
...
$client = new Google_Client();
$client->setClientId($clientId);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectUri);
$client->setScopes("email");
if(!isset($_GET['code']))
header("Location: ".$client->createAuthUrl());
else
{
$client->authenticate($_GET['code']);
$_SESSION["access_token"] = $client->getAccessToken();
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
} else {
$authUrl = $client->createAuthUrl();
}
$ticket = $client->verifyIdToken();
if ($ticket) {
$admin = $ticket->getAttributes();
}
$_SESSION["email"] = $admin["payload"]["email"];
...
Run Code Online (Sandbox Code Playgroud)
谁能提供解释吗?提前致谢
有些我在谷歌中没有找到任何答案。因此,我将分享我为使其发挥作用所做的工作。
简短的回答:因为您在 verifyIdToken() 中使用的令牌无效。
长答案如下:
我不确定这是否是正确的步骤:
oauth client_id和。oauth client secret$token = $client->fetchAccessTokenWithAuthCode("THE_AUTHORIZATION_CODE");$token,我收到了以下内容:access_token, token_type, expires_in, refresh_token, id_token, created。id_token在$payload = $client->verifyIdToken(id_token);$payload。注意:为了避免您的代码再次返回“令牌中的段数错误”错误,您必须尝试捕获该verifyIdToken方法
try {
$payload = $client->verifyIdToken(id_token);
}
catch (Exception $e) {
echo "Invalid id token";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12334 次 |
| 最近记录: |