Не могли бы вы рассказать мне, как я могу получить пользовательские данные (имя, адрес электронной почты) через Google+ Javascript / Php api? Я authResult['code']
этому руководству , в котором описывается, как получить authResult['code']
через Javascript.
Хорошо, что у меня есть. Я отправляю его на сервер через Ajax, но я не знаю, как получить данные пользователя, такие как имя и адрес электронной почты через PHP, но без каких-либо переадресаций. Вот примеры кода Javascript:
function googleStart() { console.log('googleStart'); gapi.load('auth2', function() { auth2 = gapi.auth2.init({ client_id: '811214467813-v3fmui5dfghte5m0kmohsf6dl11ori3tg.apps.googleusercontent.com', // Scopes to request in addition to 'profile' and 'email' fetch_basic_profile: false, scope: 'profile email' }); }); } function googleSignIn(authResult) { console.log(authResult); if (authResult['code']) { console.log(authResult); // Hide the sign-in button now that the user is authorized, for example: $('#signinButton').attr('style', 'display: none'); // Send the code to the server $.ajax({ type: 'POST', url : "{link :Signgoogle:in}", accepts : 'json', // Spýtať sa na DJPW čo to tu je zakomentované //contentType: 'application/octet-stream; charset=utf-8', //processData: false, data : { 'code' : authResult['code'], 'id_token' : authResult.getAuthResponse().id_token }, ...
PHP:
public function actionIn() { $code = $_POST['code']; $client = new \Google_Client(); $client->setClientId(self::APP_ID); $client->setClientSecret(self::APP_SECRET); $client->setRedirectUri(self::REDIRECT_URI); $client->authenticate($code); $access_token = $client->getAccessToken(); $client->setAccessToken($access_token); $client->getAuth(); $data = $access_token; if($data) { $this->sendJson(array($data)); } else { $data = array('error' => '$client->verifyIdToken($id) skočil chybou.'); $this->sendJson($data); } } ....
PHP получает access_token
но не данные пользователя. Конечно, это вызов ajax, поэтому я не могу переадресовывать, как описывает Google на каждой странице. Можете ли вы мне помочь, я не могу найти решение.
Большое спасибо.
После того как у вас есть аутентифицированный клиент для пользователя, вы захотите сделать запрос к API Google+ people.get API .
$client = new Google_Client(); $client->setClientId(CLIENT_ID); $client->setClientSecret(CLIENT_SECRET); $client->setRedirectUri(REDIRECT_URI); $client->setAccessToken($access_token); $plus = new Google_Service_Plus($client); $me = $plus->people->get('me'); print "ID: {$me['id']}\n"; print "Display Name: {$me['displayName']}\n"; print "Image Url: {$me['image']['url']}\n"; print "Url: {$me['url']}\n";
Для их электронной почты вам придется перебирать массив $me['emails']
и находить значение с type=account
.
если вы не используете клиентскую библиотеку google, вы можете использовать этот google api. Для получения сведений о клиенте вы просто передаете токен на этот api https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= <your_token>
$response = file_get_contents ( 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' . $_REQUEST['token'] ); $response = json_decode ( $response ); echo "<pre>"; print_r ( $response ); echo "</pre>";
Это будет аутентифицировать пользователя, и оно вернет объект
stdClass Object ( [iss] => accounts.google.com [at_hash] => hE0R********nxg [aud] => 79*********************p.apps.googleusercontent.com [sub] => 1028*****2 [email_verified] => true [azp] => 7945823****p.apps.googleusercontent.com [email] => bik***@gmail.com [iat] => 14***7 [exp] => 1***07 [name] => Bik****M [picture] => https://lh6.googleusercontent.com/-W8cA***/photo.jpg [given_name] => Bike*** [family_name] => M [locale] => en [alg] => RS256 [kid] => 70f6c4267*******cb )
Здесь приведен пример: http://wiki.workassis.com/implementing-google-sign-in-for-websites