Cara mendapatkan ID pengguna Facebook menggunakan token akses

89

Saya memiliki aplikasi desktop Facebook dan menggunakan Graph API . Saya bisa mendapatkan token akses, tetapi setelah itu selesai - saya tidak tahu cara mendapatkan ID pengguna.

Aliran saya seperti ini:

  1. Saya mengirim pengguna ke https://graph.facebook.com/oauth/authorize dengan semua izin tambahan yang diperlukan.

  2. Di halaman redirect saya, saya mendapatkan kode dari Facebook.

  3. Kemudian saya melakukan permintaan HTTP ke graph.facebook.com/oauth/access_token dengan kunci API saya dan saya mendapatkan token akses sebagai tanggapan.

Sejak saat itu saya tidak bisa mendapatkan ID pengguna.

Bagaimana masalah ini diselesaikan?

Mohoch
sumber

Jawaban:

153

Jika Anda ingin menggunakan Graph API untuk mendapatkan ID pengguna saat ini, cukup kirimkan permintaan ke:

https://graph.facebook.com/me?access_token=...
serg
sumber
1
Saya mencoba panggilan yang sama persis di atas: hanya kembali: {"success": true}
Paul Kenjora
4
Ini tidak mengembalikan id lagi. Gunakan:https://graph.facebook.com/me?fields=id&access_token=xxxxxx
M3RS
2
Apa itu 'access_token'? Saya mencoba menggunakan token akses halaman dan token akses pengguna. Saya mendapatkan tanggapan 'token tidak valid' menggunakan ini.
Semut
34

Cara termudah adalah

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

maka Anda akan mendapatkan respon json yang hanya berisi userid.

pashaplus
sumber
1
{"error": {"message": "(# 100) Bidang tidak diketahui: id pengguna.", "type": "OAuthException", "code": 100}}
Nikolay Kuznetsov
1
@NikolayKuznetsov: maaf kawan, di abaikan alih-alih id saya menulis userid , saya edit sekarang, silakan coba lagi
pashaplus
1
Tidak masalah, saya sudah mencobanya, jadi saya memposting komentar saya sebelumnya.
Nikolay Kuznetsov
2
Saya mendapatkan pesan kesalahan berikut Token akses saya aktif. {"error": {"message": "Token akses aktif harus digunakan untuk menanyakan informasi tentang pengguna saat ini.", "type": "OAuthException", "code": 2500, "fbtrace_id": "HA0UNBRymfa"} }
Ajit Goel
apa token akses dan dari mana mendapatkannya
Perdana
10

Token akses facebook juga terlihat serupa "1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc"

jika Anda mengekstrak bagian tengah dengan menggunakan | untuk memisahkan Anda

2.h1MTNeLqcLqw __. 86400.129394400-605430316

kemudian bagi lagi dengan -

bagian terakhir 605430316 adalah id pengguna.

Berikut adalah kode C # untuk mengekstrak id pengguna dari token akses:

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

PERINGATAN: Struktur token akses tidak berdokumen dan mungkin tidak selalu sesuai dengan pola di atas. Gunakan dengan resiko Anda sendiri.

Perbarui Karena perubahan di Facebook. metode yang disukai untuk mendapatkan userid dari token akses terenkripsi adalah sebagai berikut:

try
{
    var fb = new FacebookClient(accessToken);
    var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
    return (string)result["id"];
}
catch (FacebookOAuthException)
{
    return null;
}
prabir
sumber
5
Ini berfungsi dengan sempurna sebelumnya, tetapi setelah pembaruan Facebook ke OAuth2.0. Metode ini tidak dapat bekerja lagi.
lucemia
12
Saya berharap saya memperhatikan peringatan tentang pendekatan ini. Kami tertangkap basah hari ini karena tiba-tiba format token akses tampaknya telah berubah. Saya sangat menyarankan untuk menghindari pendekatan ini dan mengikuti jawaban yang diterima.
Todd Menier
2
itulah jawaban paling lucu yang pernah saya lihat: D
khunshan
Perhatikan juga bahwa metode seperti ini tidak memverifikasi ID pengguna yang diberikan - siapa pun dapat menyambung dengan id apa pun yang mereka inginkan dan kode ini akan mempercayainya secara membabi buta.
Matt Lyons
7

Anda dapat menggunakan kode di bawah ini pada onSuccess (LoginResult loginResult)

loginResult.getAccessToken (). getUserId ();

SkyWalker
sumber
6

Anda hanya perlu menekan API Grafik lain:

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

Ini akan memberikan Id email Anda dan ID pengguna (untuk Facebook) juga.


sumber
Saya hanya mendapatkan provider_id dan nama dari itu, tetapi saya tidak mendapatkan nama pengguna dari facebook. Seperti tautan , Ini adalah nama pengguna yang akan langsung membuka profil pengguna, dengan id penyedia itu tidak berfungsi.
Salman Riyaz
3

Dengan API terbaru, berikut kode yang saya gunakan untuk itu

/*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"]);
AndrewSmiley
sumber
Saya mendapat ide, tetapi itu tidak mengembalikan userID hanya token.
János
Ingatlah bahwa jawaban ini berumur 2 tahun. Mereka mungkin telah mengubah beberapa bagian SDK
AndrewSmiley
2

di FacebookSDK v2.1 (Saya tidak dapat memeriksa versi lama). Kita punya

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

Namun demikian menurut komentar di FacebookSDK

@discussion Ini mungkin tidak diisi untuk perilaku login seperti akun sistem iOS.

Jadi mungkin Anda harus memeriksa apakah itu tersedia, dan kemudian apakah menggunakannya, atau memanggil permintaan untuk mendapatkan id pengguna

Gia Dang
sumber
0

Lihat jawaban ini , yang menjelaskan, bagaimana mendapatkan respon ID. Pertama, Anda perlu membuat metode get data:

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

Kemudian cukup gunakan metode Anda kapan pun Anda mau, seperti ini:

getFbData(access_token, '/me?fields=id&', (result) => {
      console.log(result);
});
chavy
sumber