एक्सेस टोकन का उपयोग करके फेसबुक यूजर आईडी कैसे प्राप्त करें


89

मेरे पास फेसबुक डेस्कटॉप एप्लिकेशन है और मैं ग्राफ़ एपीआई का उपयोग कर रहा हूं । मैं एक्सेस टोकन प्राप्त करने में सक्षम हूं, लेकिन उसके बाद किया जाता है - मुझे नहीं पता कि उपयोगकर्ता की आईडी कैसे प्राप्त करें।

मेरा प्रवाह इस तरह है:

  1. मैं उपयोगकर्ता को सभी आवश्यक विस्तारित अनुमतियों के साथ https://graph.facebook.com/oauth/authorize पर भेजता हूं ।

  2. अपने रीडायरेक्ट पेज में मुझे फेसबुक से कोड मिलता है।

  3. फिर मैं अपनी API कुंजी के साथ ग्राफ.facebook.com/oauth/access_token पर एक HTTP अनुरोध करता हूं और मुझे प्रतिक्रिया में एक्सेस टोकन मिलता है।

उस बिंदु से मैं उपयोगकर्ता आईडी प्राप्त नहीं कर सकता।

इस समस्या को कैसे हल किया जा सकता है?

जवाबों:


153

यदि आप वर्तमान उपयोगकर्ता आईडी प्राप्त करने के लिए ग्राफ एपीआई का उपयोग करना चाहते हैं तो बस एक अनुरोध भेजें:

https://graph.facebook.com/me?access_token=...

1
मैंने ऊपर दिए गए सटीक कॉल की कोशिश की: बस रिटर्न: {"सफलता": सच}
पॉल केनजोरा

4
यह अब आईडी वापस नहीं करता है का प्रयोग करें:https://graph.facebook.com/me?fields=id&access_token=xxxxxx
M3RS

2
'Access_token' क्या है? मैंने पेज एक्सेस टोकन और उपयोगकर्ता एक्सेस टोकन का उपयोग करने की कोशिश की। मुझे इसका उपयोग करके 'अमान्य टोकन' प्रतिक्रियाएँ प्राप्त होती हैं।
चींटी

34

सबसे आसान तरीका है

https://graph.facebook.com/me?fields=id&access_token="xxxxx"

फिर आपको json प्रतिक्रिया मिलेगी जिसमें केवल userid है।


1
{"त्रुटि": {"संदेश": "(# 100) अज्ञात क्षेत्र: उपयोगकर्ता।", "प्रकार": "OAuthException", "कोड": 100}}
निकोले कुजनेत्सोव

1
@NikolayKuznetsov: माफ करना यार, आई डी के बजाय अनदेखी में मैंने लिखा है userid , मैंने अभी संपादित किया है, कृपया पुनः प्रयास करें
pashaplus

1
कोई समस्या नहीं, मैंने पहले ही कोशिश कर ली है, इसलिए मैं अपनी पिछली टिप्पणी पोस्ट करता हूं।
निकोले कुजनेत्सोव

2
मुझे निम्न त्रुटि मिल रही है मेरा एक्सेस टोकन सक्रिय है। {"त्रुटि": {"संदेश": "वर्तमान उपयोगकर्ता के बारे में जानकारी को क्वेरी करने के लिए एक सक्रिय पहुँच टोकन का उपयोग किया जाना चाहिए।", "प्रकार": "OAuthException", "कोड": 2500, "fbtrace_id": "HA0UNBRymfa"} }
अजीत गोयल

एक्सेस टोकन क्या है और इसे कहां से प्राप्त करना है
प्राइम

10

Facebook acess टोकन भी समान है "1249203702 | 2.h1MTNeLqcLww __ | 86400.129394400-605430316 | -WE1iH_CV-afThhDPc"

यदि आप मध्य भाग का उपयोग करके निकालते हैं | विभाजित करने के लिए आपको मिलता है

2.h1MTNeLqcLqw __। 86,400.129394400-605,430,316

फिर से विभाजित -

अंतिम भाग 605430316 उपयोगकर्ता आईडी है।

यहाँ एक्सेस टोकन से यूजर आईडी निकालने के लिए C # कोड दिया गया है:

   public long ParseUserIdFromAccessToken(string accessToken)
   {
        Contract.Requires(!string.isNullOrEmpty(accessToken);

        /*
         * access_token:
         *   1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc
         *                                               |_______|
         *                                                   |
         *                                                user id
         */

        long userId = 0;

        var accessTokenParts = accessToken.Split('|');

        if (accessTokenParts.Length == 3)
        {
            var idPart = accessTokenParts[1];
            if (!string.IsNullOrEmpty(idPart))
            {
                var index = idPart.LastIndexOf('-');
                if (index >= 0)
                {
                    string id = idPart.Substring(index + 1);
                    if (!string.IsNullOrEmpty(id))
                    {
                        return id;
                    }
                }
            }
        }

        return null;
    }

चेतावनी: पहुँच टोकन की संरचना अविभाजित है और ऊपर दिए गए पैटर्न को हमेशा फिट नहीं कर सकती है। अपने जोखिम पर इसका इस्तेमाल करो।

फेसबुक में बदलाव के कारण अपडेट । एन्क्रिप्टेड एक्सेस टोकन से उपयोगकर्ता को प्राप्त करने के लिए पसंदीदा तरीका निम्नानुसार है:

try
{
    var fb = new FacebookClient(accessToken);
    var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
    return (string)result["id"];
}
catch (FacebookOAuthException)
{
    return null;
}

5
यह पूरी तरह से पहले काम करता है, लेकिन फेसबुक OAuth2.0 के अपडेट के बाद। यह विधि अब और काम नहीं कर सकती।
लुसमीया

12
काश मैंने इस दृष्टिकोण के बारे में चेतावनी को ध्यान में रखा होता। हम आज अपनी पैंट के साथ नीचे उतरे, नीले रंग से बाहर पहुंच टोकन का प्रारूप बदल गया है। मैं अत्यधिक इस दृष्टिकोण से बचने और स्वीकृत उत्तर के साथ जाने की सलाह देता हूं।
टॉड मेनियर

2
सबसे मज़ेदार जवाब जो मैंने कभी देखा है: D
khunshan

यह भी ध्यान दें कि इस तरह के तरीके दिए गए यूजर आईडी को सत्यापित नहीं करते हैं - कोई भी व्यक्ति जो भी आईडी चाहता है उसमें विभाजित कर सकता है और यह कोड नेत्रहीन उस पर भरोसा करेगा।
मैट लियोन


6

आपको बस एक और ग्राफ एपीआई मारना है:

https://graph.facebook.com/me?access_token={access-token}

यह आपकी ई-मेल आईडी और यूजर आईडी (फेसबुक के लिए) भी देगा।


Im केवल प्रदाता_आईडी और उस से नाम प्राप्त कर रहा है, लेकिन फ़ेसबुक से उपयोगकर्ता नाम प्राप्त नहीं कर रहा है। लिंक की तरह , यह उपयोगकर्ता नाम है जो सीधे उपयोगकर्ता प्रोफ़ाइल को खोल देगा, प्रदाता आईडी के साथ यह काम नहीं कर रहा है।
सलमान रियाज़

3

नवीनतम एपीआई के साथ, यहां कोड मैंने इसके लिए उपयोग किया है

/*params*/
NSDictionary *params = @{
                         @"access_token": [[FBSDKAccessToken currentAccessToken] tokenString],
                         @"fields": @"id"
                         };
/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                              initWithGraphPath:@"me"
                              parameters:params
                              HTTPMethod:@"GET"];

[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error) {
    NSDictionary *res = result;
    //res is a dict that has the key
    NSLog([res objectForKey:@"id"]);

मुझे यह विचार मिला, लेकिन यह उपयोगकर्ता आईडी केवल टोकन नहीं लौटाता है।
János

ध्यान रहे यह उत्तर 2 वर्ष पुराना है। उन्होंने एसडीके के कुछ हिस्सों को बदल दिया होगा
एंड्रयूस्मेली

2

फेसबुक में v2.1 (मैं पुराने संस्करण की जांच नहीं कर सकता)। हमारे पास है

NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID;

हालाँकि FacebookSDK में टिप्पणी के अनुसार

@discussion यह आईओएस सिस्टम अकाउंट जैसे लॉगिन व्यवहार के लिए आबाद नहीं हो सकता है।

तो क्या आपको यह जांचना चाहिए कि क्या यह उपलब्ध है, और फिर इसका उपयोग करें या उपयोगकर्ता आईडी प्राप्त करने के लिए अनुरोध करें


0

इस उत्तर की जांच करें , जिसमें बताया गया है कि आईडी प्रतिक्रिया कैसे प्राप्त करें। सबसे पहले, आपको डेटा प्राप्त करने की विधि बनाने की आवश्यकता है:

const https = require('https');
getFbData = (accessToken, apiPath, callback) => {
    const options = {
        host: 'graph.facebook.com',
        port: 443,
        path: `${apiPath}access_token=${accessToken}`, // apiPath example: '/me/friends'
        method: 'GET'
    };

    let buffer = ''; // this buffer will be populated with the chunks of the data received from facebook
    const request = https.get(options, (result) => {
        result.setEncoding('utf8');
        result.on('data', (chunk) => {
            buffer += chunk;
        });

        result.on('end', () => {
            callback(buffer);
        });
    });

    request.on('error', (e) => {
        console.log(`error from facebook.getFbData: ${e.message}`)
    });

    request.end();
}

फिर जब भी आप अपनी विधि का उपयोग करें, जैसे:

getFbData(access_token, '/me?fields=id&', (result) => {
      console.log(result);
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.