Google API के माध्यम से उपयोगकर्ता जानकारी प्राप्त करें


103

क्या Google API के माध्यम से उपयोगकर्ता की प्रोफ़ाइल से जानकारी प्राप्त करना संभव है? यदि यह संभव है, तो मुझे किस एपीआई का उपयोग करना चाहिए?

मैं ऐसी जानकारी में दिलचस्प हूँ:

इसके अलावा, उपयोगकर्ता की प्रोफ़ाइल से अन्य जानकारी प्राप्त करना अच्छा होगा।

जवाबों:


122

इसे स्कोप में जोड़ें - https://www.googleapis.com/auth/userinfo.profile

और प्राधिकरण होने के बाद, जानकारी प्राप्त करें - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

इसमें सामान का भार है - जिसमें नाम, सार्वजनिक प्रोफ़ाइल यूआरएल, लिंग, फोटो आदि शामिल हैं।


1
मैंने उपर्युक्त Urls का उपयोग किया लेकिन उपयोगकर्ता का प्रोफ़ाइल प्राप्त करने में असमर्थ। केवल Getting {’हो रहा है। Plz आप कुछ कोड या लिंक को पोस्ट कर सकते हैं। अग्रिम में धन्यवाद।
Panache

9
आपके द्वारा प्रदान किया गया url पूरी तरह से काम करता है, अर्थात googleapis.com/oauth2/v1/userinfo । लेकिन क्या आप बता सकते हैं कि आपको यह यूआरएल कहां से मिला। मैंने इसके लिए खोज करने की कोशिश की, लेकिन इसे कहीं नहीं पाया। क्या Google किसी स्थान पर इन url का दस्तावेज़ देता है?
अक्षर राज

1
मैं विशिष्ट दायरे के लिए लौटाए गए डेटा के विनिर्देश कहां देख सकता हूं?
मटका

3
स्कोप "userinfo.profile" को पदावनत किया जा रहा है, इसके बजाय आपको "प्रोफ़ाइल" और "ईमेल" का उपयोग करना चाहिए। Developers.google.com/+/web/api/rest/oauth#authorization-scopes
मार्टिन बी।

3
आप इस url को क्वेरी कर सकते हैं, उपयोगकर्ता द्वारा इस दायरे तक पहुँचने के लिए अधिकृत करने के बाद आपको प्राप्त टोकन का उपयोग करके। उदाहरण:curl -X GET "https://www.googleapis.com/oauth2/v1/userinfo?alt=json" -H"Authorization: Bearer accessTokenHere"
प्रतीक सिंघल

90

दायरा - 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 उदाहरण है।
आप userInfo सरणी प्राप्त करने के लिए json_decode फ़ंक्शन का उपयोग कर सकते हैं।

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

1
मैं उनकी प्रतिक्रिया का उपयोग कैसे कर सकता हूं?
ताहिर यासीन

मैं आपके द्वारा बताई गई अन्य जानकारी के साथ ईमेल पता कैसे प्राप्त कर सकता हूं?
दिलंथा

कृपया, $userInfoArrayगुणों तक पहुँचने के लिए सही प्रारूप के लिए कोड को अपडेट करें । यह $userInfoArray['email']ईमेल पते की तरह होना चाहिए $userInfoArray। RPOPERTIES को जोड़ने के लिए एकल उद्धरण पर ध्यान दें।
शांता कुमारा

@ शांता कुमरा आप इसे स्वयं संपादित कर सकते थे, लेकिन चिंता न करें जैसा मैंने अभी किया है। सभी के लिए हम जानते हैं कि वे कोड को छोड़ सकते थे define(email, 'email');)
क्रियाबापी

मैं फोन नंबर और उम्र / जन्मदिन प्राप्त करना चाहता हूं
प्रसाद

29

इस दायरे 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} - userId वर्तमान में लॉग इन उपयोगकर्ता के लिए सिर्फ 'me' हो सकता है।


यह एक एकीकरण भविष्य के प्रमाण होने की जानकारी की महत्वपूर्ण शांति है। पदावनत किए गए स्कोप डेवलपर्स के
पांडुरंग पाटिल

और अभी तक ... If you are directly requesting the “plus.me” scope, any other Google+ OAuth scopes, or making any Google+ API calls, please ensure that you remove these requests from your project before March 7, 2019.- Google
plumSemPy

25

मैं google-api-php-client केPHP संस्करण 1.1.4 का उपयोग करके इसे हल कर रहा हूं

उपयोगकर्ता को Google प्रमाणीकरण पृष्ठ पर पुनर्निर्देशित करने के लिए निम्न कोड माना जाता है:

 $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

हालाँकि, स्थान वापस नहीं किया गया है। नए YouTube खातों में YouTube विशिष्ट उपयोगकर्ता नाम नहीं हैं


स्थान कैसे प्राप्त करें?
सॉफ्टसन

मैं इस दायरे का उपयोग करके लिंग की जानकारी नहीं ले सकता (मैंने लिंग की जानकारी सार्वजनिक रखी है)। मैंने इसके लिए oauth खेल के मैदान डेवलपर्स की कोशिश की है। मैं सर्वर साइड पर REST API का उपयोग करके ऐसा करना चाहता हूं। क्या आप इस पर मेरी मदद कर सकते हैं?
विशांत द्ध

न तो लिंग मिल सकता है। और कुछ खाते पर, ईमेल के अलावा कुछ भी नहीं लौटाया जाता है। विचार?
राज .85

5

मैं .net के लिए Google API का उपयोग कर रहा हूं, लेकिन इसमें कोई संदेह नहीं है कि आप एपीआई के अन्य संस्करण का उपयोग करके इस जानकारी को प्राप्त करने का एक ही तरीका पा सकते हैं। के रूप में user872858 उल्लेख किया है, गुंजाइश userinfo.profile पदावनत किया गया है ( लेख गूगल )।

उपयोगकर्ता प्रोफ़ाइल जानकारी प्राप्त करने के लिए मैं निम्नलिखित कोड का उपयोग करता हूं ( 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();
                    }

थान, आप 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>

2

3 चरण हैं जिन्हें चलाने की आवश्यकता है।

  1. Google API कंसोल से अपने ऐप के क्लाइंट आईडी को पंजीकृत करें
  2. इस एपीआई https://developers.google.com/identity/protocols/OpenIDConnect#sendauthrequest का उपयोग करके सहमति देने के लिए अपने अंतिम उपयोगकर्ता से पूछें
  3. उपयोग Google की OAuth2 एपीआई पर वर्णन किए गए https://any-api.com/googleapis_com/oauth2/docs/userinfo/oauth2_userinfo_v2_me_get टोकन कदम 2 में प्राप्त का उपयोग कर (हालांकि अभी भी मैं नहीं "फील्ड" कैसे को भरने के लिए पैरामीटर ठीक से मिल सकता है) ।

यह बहुत दिलचस्प है कि यह सरलतम उपयोग कहीं भी स्पष्ट रूप से वर्णित नहीं है। और मेरा मानना है कि एक खतरा है, आपको verified_emailप्रतिक्रिया में आने वाले पैरामीटर पर ध्यान देना चाहिए । क्योंकि अगर मैं गलत नहीं हूँ तो यह आपके आवेदन को पंजीकृत करने के लिए नकली ईमेल प्राप्त कर सकता है। (यह सिर्फ मेरी व्याख्या है, एक उचित मौका है कि मैं गलत हो सकता हूं!)

मुझे लगता है कि फेसबुक OAuth यांत्रिकी बहुत स्पष्ट रूप से वर्णित है।


1

यदि आप क्लाइंट-साइड वेब वातावरण में हैं, तो नए SSL2 जावास्क्रिप्ट API में एक बहुत आवश्यक getBasicProfile()फ़ंक्शन है, जो उपयोगकर्ता का नाम, ईमेल और छवि URL लौटाता है।

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


लेकिन वास्तविक एपीआई URL क्या है? मैंने दस्तावेज़ीकरण को देखा, मुझे वास्तविक एपीआई URL नहीं मिल रहा है। Google हमें उनके SDK के लिए धक्का दे रहा है, लेकिन हर कोई SDK का उपयोग नहीं करना चाहता है।
सुपर्टेक्नोबॉफ

0

यदि आप केवल अपने वेब ऐप के आगंतुक के लिए Google उपयोगकर्ता आईडी, नाम और चित्र लाना चाहते हैं - तो यहां वर्ष 2020 के लिए मेरा शुद्ध PHP सेवा साइड सॉल्यूशन है जिसमें कोई बाहरी लाइब्रेरी नहीं है -

यदि आप Google द्वारा वेब सर्वर एप्लिकेशन गाइड के लिए OAuth 2.0 का उपयोग करना पढ़ते हैं (और सावधान रहें, Google अपने स्वयं के प्रलेखन के लिंक बदलना पसंद करता है), तो आपको केवल 2 चरण करने होंगे:

  1. आगंतुक को अपने वेब ऐप के साथ उसका नाम साझा करने के लिए सहमति मांगने वाला एक वेब पेज प्रस्तुत करें
  2. फिर उपरोक्त वेब पेज द्वारा पारित "कोड" को अपने वेब ऐप पर ले जाएं और Google से एक टोकन (वास्तव में 2) प्राप्त करें।

लौटे हुए टोकन में से एक को "id_token" कहा जाता है और इसमें यूजर आईडी, आगंतुक का नाम और फोटो होता है।

यहाँ मेरे द्वारा वेब गेम का PHP कोड है । प्रारंभ में मैं जावास्क्रिप्ट एसडीके का उपयोग कर रहा था, लेकिन फिर मैंने देखा है कि नकली उपयोगकर्ता डेटा को मेरे वेब गेम में पारित किया जा सकता है, जब केवल क्लाइंट साइड एसडीके (विशेष रूप से उपयोगकर्ता आईडी, जो मेरे गेम के लिए महत्वपूर्ण है) का उपयोग कर रहा है, इसलिए मैंने उपयोग करना बंद कर दिया है सर्वर की ओर PHP:

<?php

const APP_ID       = '1234567890-abcdefghijklmnop.apps.googleusercontent.com';
const APP_SECRET   = 'abcdefghijklmnopq';

const REDIRECT_URI = 'https://the/url/of/this/PHP/script/';
const LOCATION     = 'Location: https://accounts.google.com/o/oauth2/v2/auth?';
const TOKEN_URL    = 'https://oauth2.googleapis.com/token';
const ERROR        = 'error';
const CODE         = 'code';
const STATE        = 'state';
const ID_TOKEN     = 'id_token';

# use a "random" string based on the current date as protection against CSRF
$CSRF_PROTECTION   = md5(date('m.d.y'));

if (isset($_REQUEST[ERROR]) && $_REQUEST[ERROR]) {
    exit($_REQUEST[ERROR]);
}

if (isset($_REQUEST[CODE]) && $_REQUEST[CODE] && $CSRF_PROTECTION == $_REQUEST[STATE]) {
    $tokenRequest = [
        'code'          => $_REQUEST[CODE],
        'client_id'     => APP_ID,
        'client_secret' => APP_SECRET,
        'redirect_uri'  => REDIRECT_URI,
        'grant_type'    => 'authorization_code',
    ];

    $postContext = stream_context_create([
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($tokenRequest)
        ]
    ]);

    # Step #2: send POST request to token URL and decode the returned JWT id_token
    $tokenResult = json_decode(file_get_contents(TOKEN_URL, false, $postContext), true);
    error_log(print_r($tokenResult, true));
    $id_token    = $tokenResult[ID_TOKEN];
    # Beware - the following code does not verify the JWT signature! 
    $userResult  = json_decode(base64_decode(str_replace('_', '/', str_replace('-', '+', explode('.', $id_token)[1]))), true);

    $user_id     = $userResult['sub'];
    $given_name  = $userResult['given_name'];
    $family_name = $userResult['family_name'];
    $photo       = $userResult['picture'];

    if ($user_id != NULL && $given_name != NULL) {
        # print your web app or game here, based on $user_id etc.
        exit();
    }
}

$userConsent = [
    'client_id'     => APP_ID,
    'redirect_uri'  => REDIRECT_URI,
    'response_type' => 'code',
    'scope'         => 'profile',
    'state'         => $CSRF_PROTECTION,
];

# Step #1: redirect user to a the Google page asking for user consent
header(LOCATION . http_build_query($userConsent));

?>

आप JWT हस्ताक्षर की पुष्टि करके अतिरिक्त सुरक्षा जोड़ने के लिए एक PHP लाइब्रेरी का उपयोग कर सकते हैं। मेरे उद्देश्यों के लिए यह अनावश्यक था, क्योंकि मुझे विश्वास है कि Google नकली आगंतुक डेटा भेजकर मेरे छोटे वेब गेम को धोखा नहीं देगा।

इसके अलावा, यदि आप आगंतुक का अधिक व्यक्तिगत डेटा प्राप्त करना चाहते हैं, तो आपको एक तीसरा चरण चाहिए:

const USER_INFO    = 'https://www.googleapis.com/oauth2/v3/userinfo?access_token=';
const ACCESS_TOKEN = 'access_token'; 

# Step #3: send GET request to user info URL
$access_token = $tokenResult[ACCESS_TOKEN];
$userResult = json_decode(file_get_contents(USER_INFO . $access_token), true);

या आप उपयोगकर्ता की ओर से अधिक अनुमतियाँ प्राप्त कर सकते हैं - Google API के लिए OAuth 2.0 स्कोप की लंबी सूची देखें ।

अंत में, मेरे कोड में प्रयुक्त APP_ID और APP_SECRET स्थिरांक - आपको Google API कंसोल से प्राप्त होते हैं :

स्क्रीनशॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.