0

Я получаю token-id от клиента android.
На первом этапе я проверяющий маркер с помощью следующего кода:получить информацию о пользователе через клиент google api

  $tokenId = $request->get('token-id'); 
      $google_client = new Google_Client(); 
      $google_client->setApplicationName("Ashojash"); 
      $google_client->setClientId(env("GOOGLE_KEY")); 
      $google_client->setClientSecret(env("GOOGLE_SECRET")); 
      $google_client->setIncludeGrantedScopes(true); 
      $google_client->addScope(['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/plus.login']); 
      $credentials = $google_client->verifyIdToken($tokenId); 
      if ($credentials) 
      { 
       $data = $credentials->getAttributes(); 
       // validate aud against server client_id 

       return $data['payload']['sub']; // user ID 
      } 
       return false; 

получил данные от Google является:

array:2 [ 
"envelope" => array:2 [ 
"alg" => "RS256" 
"kid" => "23e5872762976b37944c33e4b2602656093ece91" 
] 
"payload" => array:12 [ 
"iss" => "https://accounts.google.com" 
"aud" => "346904023124-73h70s03c0dipla8ltcbcd2ko076ft43.apps.googleusercontent.com" 
"sub" => "111167217866315036918" 
"email_verified" => true 
"azp" => "346904023124-lehbs8510nibuq5ci125h8mu6u2ir4q1.apps.googleusercontent.com" 
"email" => "[email protected]" 
"iat" => 1452178925 
"exp" => 1452182525 
"name" => "john F.kenedy" 
"given_name" => "john" 
"family_name" => "F.kenedy" 
"locale" => "en"] 
    ] 

После того как я подтверждено токенов идентификатора, Как получить пользователь Информация?
Что меня интересует, являются:
1-Email
2-User Базовая информация
3-Google плюс информация
Я установил Socialite тоже, так что, если это возможно включить ваши ответы с Socialite тоже.

+0

не ваши данные от Google является информация о пользователе? я вижу имя, адрес электронной почты и т. д. – ssuhat

+0

@sstarlight, если вы имеете в виду второй блок моего кода, который извлекается из google через '' id-token'' – Mehrdad

+0

Я думаю, что $ data ['payload'] ['email'] содержит адрес электронной почты пользователя и т. д. –

ответ

0

Используя google-api-php-client library, как только вы получите результат из $ google_client-> verifyIdToken, вы можете получить доступ ко всем атрибутам, которые вы уже разместили в своем вопросе.

Протестировано:

define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']); 
require_once (ROOT_PATH.'/google-api-php-client/src/Google_Client.php'); 


$ClientID_debug = 'xxxxxxx.apps.googleusercontent.com'; 
$ClientID_release = 'xxxxxxx.apps.googleusercontent.com'; 
$mToken = $_POST['mToken']; 
$build = $_POST['build']; 

$google_client = new Google_Client(); 

if($build=='DEBUG'){ 
    $google_client->setClientId($ClientID_debug); 
}else{ 
    $google_client->setClientId($ClientID_release); 
} 

$google_result = $google_client->verifyIdToken($mToken); 


if ($google_result){ 
    $data = $google_result->getAttributes(); 
    $tokenUserID = $data['payload']['sub']; 
    $tokenAudience = $data['payload']['aud']; 
    $tokenEmail = $data['payload']['email']; 
    //etc.. 

    //send result back to Android client (could also use JSON to send all attributes) 
    echo($tokenAudience); 
} 

Зов Android с помощью AsyncTask:

protected String doInBackground(String... params) { 

    try { 
     //Always use https to prevent man-in-the-middle attacks! 
     URL url = new URL("https://www.example.com/validateTokenID.php"); 
     Map<String, Object> HTTPpostParams = new LinkedHashMap<>(); 

     if (BuildConfig.DEBUG) { 
      //debug build 
      HTTPpostParams.put("build", "DEBUG"); 
     }else{ 
      //release build 
      HTTPpostParams.put("build", "RELEASE"); 
     } 

     HTTPpostParams.put("mToken", MygoogleSignedInAccount.getIdToken()); 

     StringBuilder postData = new StringBuilder(); 
     for (Map.Entry<String, Object> param : HTTPpostParams.entrySet()) { 
      if (postData.length() != 0) postData.append('&'); 
      postData.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
      postData.append('='); 
      postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); 
     } 
     byte[] postDataBytes = postData.toString().getBytes("UTF-8"); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); 
     conn.setDoOutput(true); 
     conn.getOutputStream().write(postDataBytes); 

     Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
     StringBuilder strB = new StringBuilder(); 

     for (int c = in.read(); c != -1; c = in.read()) strB.append((char) c); 

     return strB.toString(); 
    } catch (Exception e) { 
     //this.exception = e; 
     Log.e("MyApp", e.getMessage()); 
     return e.getMessage(); 
    } 

} 
+0

это изменилось в v2: $ userData = $ client-> verifyIdToken ($ idToken); $ userId = $ userData ['sub']; –

Смежные вопросы