webentwicklung-frage-antwort-db.com.de

Nutzerdaten über Google API abrufen

Kann ich über die Google-API Informationen aus dem Benutzerprofil abrufen? Wenn es möglich ist, welche API soll ich verwenden?

Ich bin an solchen Informationen interessiert:

Es wäre auch cool, andere Informationen aus dem Benutzerprofil zu erhalten.

89
glagola

Fügen Sie dies zum Geltungsbereich hinzu - https://www.googleapis.com/auth/userinfo.profile

Wenn die Autorisierung abgeschlossen ist, erhalten Sie die Informationen von - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

Es hat jede Menge Zeug - einschließlich Name, öffentliche Profil-URL, Geschlecht, Foto usw.

106

scope - https://www.googleapis.com/auth/userinfo.profile

return youraccess_token = access_token

get https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token

sie werden json bekommen:

{
 "id": "xx",
 "name": "xx",
 "given_name": "xx",
 "family_name": "xx",
 "link": "xx",
 "picture": "xx",
 "gender": "xx",
 "locale": "xx"
}

Nach Tahir Yasin:

Dies ist ein PHP-Beispiel.
Sie können die Funktion json_decode verwenden, um das Array userInfo abzurufen.

$q = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxx';
$json = file_get_contents($q);
$userInfoArray = json_decode($json,true);
$googleEmail = $userInfoArray['email'];
$googleFirstName = $userInfoArray['given_name'];
$googleLastName = $userInfoArray['family_name'];
82
eason

Dieser Geltungsbereich https://www.googleapis.com/auth/userinfo.profile ist jetzt veraltet. Bitte schauen Sie unter https://developers.google.com/+/api/auth-migration#timetable nach.

Der neue Bereich, in dem Sie Profilinformationen abrufen, lautet: profile oder https://www.googleapis.com/auth/plus.login

und der Endpunkt ist - https://www.googleapis.com/plus/v1/people/ {userId} - userId kann nur "ich" für den derzeit angemeldeten Benutzer sein.

26
user872858

Ich verwende PHP und löse dieses Problem mit Version 1.1.4 von google-api-php-client

Angenommen, der folgende Code wird verwendet, um einen Benutzer zur Google-Authentifizierungsseite umzuleiten:

 $client = new Google_Client();
 $client->setAuthConfigFile('/path/to/config/file/here');
 $client->setRedirectUri('https://redirect/url/here');
 $client->setAccessType('offline'); //optional
 $client->setScopes(['profile']); //or email
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
 exit();

Unter der Annahme, dass ein gültiger Authentifizierungscode an redirect_url Zurückgegeben wird, wird im Folgenden ein Token aus dem Authentifizierungscode generiert und grundlegende Profilinformationen bereitgestellt:

 //assuming a successful authentication code is return
 $authentication_code = 'code-returned-by-google';
 $client = new Google_Client();
 //.... configure $client object code goes here
 $client->authenticate($authentication_code);
 $token_data = $client->getAccessToken();

 //get user email address
 $google_oauth =new Google_Service_Oauth2($client);
 $google_account_email = $google_oauth->userinfo->get()->email;
 //$google_oauth->userinfo->get()->familyName;
 //$google_oauth->userinfo->get()->givenName;
 //$google_oauth->userinfo->get()->name;
 //$google_oauth->userinfo->get()->gender;
 //$google_oauth->userinfo->get()->picture; //profile picture

Der Speicherort wird jedoch nicht zurückgegeben. Neue YouTube-Konten haben keine YouTube-spezifischen Nutzernamen

24
singh1469

Ich verwende Google API für .NET, aber ohne Zweifel können Sie diese Informationen auch mit einer anderen API-Version abrufen. Wie user872858 erwähnt, wurde scope userinfo.profile nicht mehr empfohlen ( google article ).

Um Informationen zum Benutzerprofil zu erhalten, verwende ich folgenden Code (neu geschriebener Teil aus Beispiel von Google ):

IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                                  new GoogleAuthorizationCodeFlow.Initializer
                                      {
                                            ClientSecrets = Secrets,
                                            Scopes = new[] { PlusService.Scope.PlusLogin,"https://www.googleapis.com/auth/plus.profile.emails.read"  }
                                       });    
TokenResponse _token = flow.ExchangeCodeForTokenAsync("", code, "postmessage", 
                              CancellationToken.None).Result;

                    // Create an authorization state from the returned token.
                    context.Session["authState"] = _token;

                    // Get tokeninfo for the access token if you want to verify.
                    Oauth2Service service = new Oauth2Service(
                     new Google.Apis.Services.BaseClientService.Initializer());
                    Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
                    request.AccessToken = _token.AccessToken;
                    Tokeninfo info = request.Execute();
                    if (info.VerifiedEmail.HasValue && info.VerifiedEmail.Value)
                    {
                        flow = new GoogleAuthorizationCodeFlow(
                                    new GoogleAuthorizationCodeFlow.Initializer
                                         {
                                             ClientSecrets = Secrets,
                                             Scopes = new[] { PlusService.Scope.PlusLogin }
                                          });

                        UserCredential credential = new UserCredential(flow, 
                                                              "me", _token);
                        _token = credential.Token;
                        _ps = new PlusService(
                              new Google.Apis.Services.BaseClientService.Initializer()
                               {
                                   ApplicationName = "Your app name",
                                   HttpClientInitializer = credential
                               });
                        Person userProfile = _ps.People.Get("me").Execute();
                    }

Dann können Sie mit userProfile auf fast alles zugreifen.

UPDATE: Damit dieser Code funktioniert, müssen Sie die entsprechenden Bereiche auf der Google-Anmeldeschaltfläche verwenden. Zum Beispiel meine Schaltfläche:

     <button class="g-signin"
             data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read"
             data-clientid="646361778467-nb2uipj05c4adlk0vo66k96bv8inqles.apps.googleusercontent.com"
             data-accesstype="offline"
             data-redirecturi="postmessage"
             data-theme="dark"
             data-callback="onSignInCallback"
             data-cookiepolicy="single_Host_Origin"
             data-width="iconOnly">
     </button>
5
LaoR

Wenn Sie sich in einer clientseitigen Webumgebung befinden, enthält die neue JavaScript-API von auth2 die dringend benötigte Funktion getBasicProfile(), die den Namen, die E-Mail-Adresse und die Bild-URL des Benutzers zurückgibt.

https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile

1
alalonde

Es müssen 3 Schritte ausgeführt werden.

  1. Registrieren Sie die Client-ID Ihrer App über die Google API-Konsole
  2. Bitten Sie Ihren Endnutzer, über diese API die Zustimmung zu erteilen. Https://developers.google.com/identity/protocols/OpenIDConnect#sendauthrequest
  3. Verwenden Sie die Google-API oauth2 wie unter https://any-api.com/googleapis_com/oauth2/docs/userinfo/oauth2_userinfo_v2_me_get beschrieben konnte nicht finden, wie der Parameter "fields" richtig ausgefüllt werden kann).

Es ist sehr interessant, dass diese einfachste Verwendung nirgends klar beschrieben wird. Und Ich glaube , dass es eine Gefahr gibt, Sie sollten auf den Parameter verified_email Achten, der in der Antwort enthalten ist. Denn wenn ich mich nicht irre kann es zu gefälschten E-Mails kommen, um Ihre Bewerbung zu registrieren. (Dies ist nur meine Interpretation, hat eine faire Chance, dass ich mich irre!)

Ich finde die OAuth Mechanik von Facebook sehr viel klarer beschrieben.

1
Mehmet Kaplan