2011-08-20 249 views

回答

84

一下添加到範圍 - https://www.googleapis.com/auth/userinfo.profile

和授權完成後,得到的信息 - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

它的東西負載 - 包括姓名,公開檔案URL地址,性別,照片等

+0

我用上面的網址,但無法獲取用戶的個人資料。只有'{'。 Plz可以發佈一些代碼或鏈接。提前致謝。 – Panache

+0

可以詳細說明如何使用上述網址獲取用戶個人資料... plz .. – Panache

+0

嚴正,只需通過OAuth 2授權該請求即可。該URL返回當前登錄用戶的數據。如果您發出請求但不發送OAuth標頭,它會給您一個錯誤。 –

75

範圍 - https://www.googleapis.com/auth/userinfo.profile

return youraccess_token = access_token 

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

你會得到JSON:

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

要塔希爾·亞辛:

這是一個PHP的例子。
您可以使用json_decode函數來獲取userInfo數組。

$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']; 
+0

如何獲取有關用戶的更多信息? –

+1

如何使用他們的迴應? –

+3

它只給出編號 –

25

此範圍https://www.googleapis.com/auth/userinfo.profile現在已被棄用。請看https://developers.google.com/+/api/auth-migration#timetable

您將使用獲得資料信息的新範圍是:配置文件或https://www.googleapis.com/auth/plus.login

和端點 - https://www.googleapis.com/plus/v1/people/ {} userId的 - 用戶id可以只是「我」爲當前登錄的用戶。

+0

這是一個對整合未來證明信息的重要平安。更多關於已棄用範圍的信息https://developers.google.com/+/web/api/rest/oauth –

4

我正在使用Google API for .Net,但毫無疑問,您可以使用其他版本的API以相同方式獲取此信息。 由於user872858提到,範圍userinfo.profile已被棄用(google article)。

要獲取用戶的個人資料信息,我使用下面的代碼(重新編寫部分來自google's example):

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(); 
        } 

比,你幾乎可以訪問使用USERPROFILE東西。

更新:要使此代碼正常工作,您必須在Google登錄按鈕上使用適當的作用域。例如我的按鈕:

 <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> 
16

我正在使用PHP並通過使用1.1版來解決此問題。的google-api-php-client

假設下面的代碼4用於一個用戶重定向到谷歌認證頁面:

$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(); 

假設有效的認證碼返回到redirect_url,下面將產生從所述認證令牌代碼以及提供基本的配置文件信息:

//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 

但是,不返回位置。 New YouTube accounts don't have YouTube specific usernames

+0

如何獲取位置? – SoftSan

+0

使用此範圍我無法獲取性別信息(我已將性別信息公開)。我已經嘗試過oauth playground developers.google.com/oauthplayground。我想在服務器端使用REST API來做到這一點。你能幫助我嗎? –

+0

既不能獲得性別。而且在某些情況下,除了電子郵件外,沒有任何內容可以返回想法? –

1

如果您處於客戶端Web環境中,則新的auth2 javascript API包含非常需要的getBasicProfile()函數,該函數返回用戶的姓名,電子郵件和圖像URL。

​​

+0

但是,實際的API網址是什麼?我查看了文檔,找不到實際的API URL。谷歌似乎推動我們到他們的SDK,但不是每個人都想使用SDK。 – Supertecnoboff

相關問題