Google API PHP-Client-Wiederverwenden von Benutzer-Token, um den Dienst nach dem Anmeldung als Benutzer aufzurufen?Php

PHP-Programmierer chatten hier
Anonymous
 Google API PHP-Client-Wiederverwenden von Benutzer-Token, um den Dienst nach dem Anmeldung als Benutzer aufzurufen?

Post by Anonymous »

Wenn ich mich bei Google anmelde und den PHP von Google API -Client verwendet habe, tausche ich einen Code aus und erhalte Token und User_id. Ich speichere das Token und User_id für diesen Benutzer.

Code: Select all


data-client_id="xxx"
data-context="signup"
data-callback="onGoogleUser"
data-auto_select="true"
data-itp_support="true">

data-type="standard"
data-size="large"
data-theme="outline"
data-text="sign_in_with"
data-shape="rectangular"
data-logo_alignment="left">

< /code>
function onGoogleUser(__res){
var token = __res.credential;
//token is posted to login script (standard ajax)
}
< /code>
//login script, token received
$token = $_POST['token'];

/*
eyJhbGciOiJSUzI1NiIsImtpZCI6IjA3YjgwYTM2NTQyODUyNWY4YmY3Y2QwODQ2ZDc0YThlZTRlZjM2MjUiLCJ0eXAiOiJKV1QifQ

for info, once it is base64 decoded

{
"alg":"RS256",
"kid":"07b80a365428525f8bf7cd0846d74a8ee4ef3625",
"typ":"JWT"
}
*/

//init google client
$client = new \Google_Client();

//this loads a file containing the keys
$client->setAuthConfig(realpath('google.json'));

//verify token and get user info from payload
$payload = $client->verifyIdToken($token);
if($payload){
//user is logged, $payload->sub is user_id

//retrieve user from DB
$user = getUser($payload->sub);

//both token and user_id are saved in user document for later use
$user->google_id = $payload->sub;
$user->google_token = $token;

//save user into db
saveUser($user);

}
< /code>
In einem anderen Skript (erneut post) versuche ich, einen Dienst als mein protokollter Benutzer zu verwenden und das Token wieder zu verwenden, das bei der Anmeldung erhalten und gespeichert wurde, wobei < /p>
//query script
$user = getUser();
$client = new \Google_Client();

//this loads a file containing the keys
$client->setAuthConfig(realpath('google.json'));

//set the user token to the client
$client->setSubject($user->email);
$client->addScope('https://www.googleapis.com/auth/business.manage');
$client->setAccessToken($user->google_token);

//list accounts
$service = new \Google_Service_MyBusinessAccountManagement($client);
$accounts = $service->accounts->listAccounts()->getAccounts();
< /code>
Ich erhalte den Fehler, dass der Client nicht autorisiert ist < /p>
PHP Fatal error: Uncaught Google\Service\Exception: { "error": "unauthorized_client", "error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested." }
< /code>
Muss ich den Client neu autorisieren? < /p>
Ich habe den richtigen Bereich in meiner Konsole für mein Projekt. Wenn ich mit Google OAuth 2.0 Playground unter Verwendung meiner Server -Anmeldeinformationen (das gleiche wie der Client in diesem Code) teste, erhalte ich eine ordnungsgemäße Antwort, aber das Token unterscheidet sich von dem JWT -Token, den ich habe. Muss ich erneut auth machen, um einen ähnlichen Token zu erhalten? Kann ich das JWT -Token des Benutzers nicht verwenden? < /P>
{
"access_token": "ya29.a0AZYkNZgRWn7N_ymc09DX_6VeDGObJh36Azb6z1ct2PHF-bgnvU9HND9i_ukAP18Q0LAnWSCNDE3sBslHx8bPbuq3wp0gJhjB25fgzM-jmJ5qzOct8hk1qNCIzy8F9BoRGC4G3D7ygX1fgcDIFdaHpQoq7ynLsxHb-O9769rmaCgYKAeMSARISFQHGX2Mi1q0mbNmw7Cx4wMEjZSyMdw0175",
"scope": "https://www.googleapis.com/auth/business.manage",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "1//04ZhkQNAoJzKcCgYIARAAGAQSNwF-L9Ir4CezWxtYhn57zlSkDK0cCmZOrvTOQhc5lDMrIkbhgp0M8ooxe9Ah7G6vHA0ISdSIAvI"
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post