Json 密钥缺少 google 张照片中的刷新标记字段 api
Json key is missing the refresh token field in google photos api
我正在使用 php 中的 google 张照片 api 创建一个应用程序。这是我的代码
function connectWithGooglePhotos()
{
$clientSecretJson = json_decode(
file_get_contents('credentials.json'),
true
)['web'];
$clientId = $clientSecretJson['client_id'];
$clientSecret = $clientSecretJson['client_secret'];
$tokenUri = $clientSecretJson['token_uri'];
$redirectUri = $clientSecretJson['redirect_uris'][0];
$scopes = ['https://www.googleapis.com/auth/photoslibrary'];
$oauth2 = new OAuth2([
'clientId' => $clientId,
'clientSecret' => $clientSecret,
'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
'redirectUri' => $redirectUri,
'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
'scope' => $scopes,
]);
// The authorization URI will, upon redirecting, return a parameter called code.
if (!isset($_GET['code'])) {
$authenticationUrl = $oauth2->buildFullAuthorizationUri(['access_type' => 'offline']);
header('Location: ' . $authenticationUrl);
} else {
// With the code returned by the OAuth flow, we can retrieve the refresh token.
$oauth2->setCode($_GET['code']);
$authToken = $oauth2->fetchAuthToken();
$refreshToken = $authToken['access_token'];
// The UserRefreshCredentials will use the refresh token to 'refresh' the credentials when
// they expire.
$_SESSION['credentials'] = new UserRefreshCredentials(
$scopes,
[
'client_id' => $clientId,
'client_secret' => $clientSecret,
'refreshToken' => $refreshToken,
]
);
$photosLibraryClient = new PhotosLibraryClient(['credentials' => $_SESSION['credentials']]);
}
return $photosLibraryClient;
}
这是重定向到身份验证时的错误
Fatal error: Uncaught InvalidArgumentException: json key is missing the
refresh_token field in C:\xampp\htdocs\gphotos\vendor\google\auth\src\Credentials\UserRefreshCredentials.php:78 Stack trace: #0 C:\xampp\htdocs\gphotos\config.php(49): Google\Auth\Credentials\UserRefreshCredentials->__construct(Array, Array) #1 C:\xampp\htdocs\gphotos\index.php(5): connectWithGooglePhotos() #2 {main} thrown in C:\xampp\htdocs\gphotos\vendor\google\auth\src\Credentials\UserRefreshCredentials.php on line 78
任何解决方案将不胜感激!
'refreshToken'
需要是 'refresh_token'
因为刷新令牌的键是 refresh_token
因此您需要将凭据更改为
[
'client_id' => $clientId,
'client_secret' => $clientSecret,
'refresh_token' => $refreshToken,
]
确保 'prompt' 设置设为 'consent',如下所示。
$url = $oauth2->buildFullAuthorizationUri([
'prompt' => 'consent',
'access_type' => 'offline'
]);
通常,只有第一次调用提示会发回刷新令牌。这是设计使然。
但是,如果您需要再次强制同意,请使用上述设置。这也将 re-generate 刷新令牌。
我正在使用 php 中的 google 张照片 api 创建一个应用程序。这是我的代码
function connectWithGooglePhotos()
{
$clientSecretJson = json_decode(
file_get_contents('credentials.json'),
true
)['web'];
$clientId = $clientSecretJson['client_id'];
$clientSecret = $clientSecretJson['client_secret'];
$tokenUri = $clientSecretJson['token_uri'];
$redirectUri = $clientSecretJson['redirect_uris'][0];
$scopes = ['https://www.googleapis.com/auth/photoslibrary'];
$oauth2 = new OAuth2([
'clientId' => $clientId,
'clientSecret' => $clientSecret,
'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
'redirectUri' => $redirectUri,
'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
'scope' => $scopes,
]);
// The authorization URI will, upon redirecting, return a parameter called code.
if (!isset($_GET['code'])) {
$authenticationUrl = $oauth2->buildFullAuthorizationUri(['access_type' => 'offline']);
header('Location: ' . $authenticationUrl);
} else {
// With the code returned by the OAuth flow, we can retrieve the refresh token.
$oauth2->setCode($_GET['code']);
$authToken = $oauth2->fetchAuthToken();
$refreshToken = $authToken['access_token'];
// The UserRefreshCredentials will use the refresh token to 'refresh' the credentials when
// they expire.
$_SESSION['credentials'] = new UserRefreshCredentials(
$scopes,
[
'client_id' => $clientId,
'client_secret' => $clientSecret,
'refreshToken' => $refreshToken,
]
);
$photosLibraryClient = new PhotosLibraryClient(['credentials' => $_SESSION['credentials']]);
}
return $photosLibraryClient;
}
这是重定向到身份验证时的错误
Fatal error: Uncaught InvalidArgumentException: json key is missing the refresh_token field in C:\xampp\htdocs\gphotos\vendor\google\auth\src\Credentials\UserRefreshCredentials.php:78 Stack trace: #0 C:\xampp\htdocs\gphotos\config.php(49): Google\Auth\Credentials\UserRefreshCredentials->__construct(Array, Array) #1 C:\xampp\htdocs\gphotos\index.php(5): connectWithGooglePhotos() #2 {main} thrown in C:\xampp\htdocs\gphotos\vendor\google\auth\src\Credentials\UserRefreshCredentials.php on line 78
任何解决方案将不胜感激!
'refreshToken'
需要是 'refresh_token'
因为刷新令牌的键是 refresh_token
因此您需要将凭据更改为
[
'client_id' => $clientId,
'client_secret' => $clientSecret,
'refresh_token' => $refreshToken,
]
确保 'prompt' 设置设为 'consent',如下所示。
$url = $oauth2->buildFullAuthorizationUri([
'prompt' => 'consent',
'access_type' => 'offline'
]);
通常,只有第一次调用提示会发回刷新令牌。这是设计使然。
但是,如果您需要再次强制同意,请使用上述设置。这也将 re-generate 刷新令牌。