Erişim belirtecini kullanarak Facebook kullanıcı kimliği nasıl alınır


90

Bir Facebook masaüstü uygulamam var ve Graph API kullanıyorum . Erişim belirtecini alabiliyorum, ancak bu yapıldıktan sonra - kullanıcının kimliğini nasıl alacağımı bilmiyorum.

Benim akışım şöyle:

  1. Kullanıcıyı gerekli tüm genişletilmiş izinlerle https://graph.facebook.com/oauth/authorize adresine gönderiyorum .

  2. Yönlendirme sayfamda kodu Facebook'tan alıyorum.

  3. Ardından API anahtarımla graph.facebook.com/oauth/access_token için bir HTTP isteği gerçekleştiriyorum ve yanıtta erişim belirtecini alıyorum.

Bu noktadan itibaren kullanıcı kimliğini alamıyorum.

Bu problem nasıl çözülebilir?

Yanıtlar:


154

Geçerli kullanıcı kimliğini almak için Graph API kullanmak istiyorsanız, şu adrese bir istek gönderin:

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

1
Yukarıdaki aramayı tam olarak denedim: sadece şunu döndürür: {"başarı": doğru}
Paul Kenjora

4
Bu artık kimliği döndürmüyor. Kullanın:https://graph.facebook.com/me?fields=id&access_token=xxxxxx
M3RS

2
'Access_token' nedir? Sayfa erişim jetonunu ve kullanıcı erişim jetonunu kullanmayı denedim. Bunu kullanarak 'geçersiz simge' yanıtları alıyorum.
Ant

@Ant u erişim belirteci almak için FaceBook Login'i uygulamanız gerekiyor
Zeeshan Ahmad Khalil

34

En kolay yol

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

o zaman sadece kullanıcı kimliğini içeren json yanıtı alacaksınız.


1
{"error": {"message": "(# 100) Bilinmeyen alanlar: userid.", "type": "OAuthException", "code": 100}}
Nikolay Kuznetsov

1
@NikolayKuznetsov: üzgünüm adamım, kullanıcı kimliği yazdım yerine göz ardı ederek şimdi düzenledim, lütfen tekrar deneyin
pashaplus

1
Sorun değil, zaten denedim, bu yüzden önceki yorumumu gönderiyorum.
Nikolay Kuznetsov

2
Aşağıdaki hatayı alıyorum Erişim belirtecim etkin. {"error": {"message": "Mevcut kullanıcı hakkındaki bilgileri sorgulamak için etkin bir erişim jetonu kullanılmalıdır.", "type": "OAuthException", "code": 2500, "fbtrace_id": "HA0UNBRymfa"} }
Ajit Goel

erişim jetonu nedir ve nereden alınır
Prime

10

Facebook erişim belirteci de benzer görünüyor "1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc"

orta kısmı | kullanarak çıkarırsanız ayırmak için olsun

2.h1MTNeLqcLqw __. 86400.129394400-605430316

sonra tekrar böl -

son kısım 605430316 kullanıcı kimliğidir.

Erişim belirtecinden kullanıcı kimliğini çıkarmak için C # kodu:

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

UYARI: Erişim belirtecinin yapısı belgelenmemiştir ve her zaman yukarıdaki modele uymayabilir. Bunu kendi sorumluluğunuzda kullanın.

Güncelleme Facebook'taki değişiklikler nedeniyle. Şifreli erişim belirtecinden kullanıcı kimliğini almak için tercih edilen yöntem şu şekildedir:

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
Önceden mükemmel çalışıyor, ancak Facebook OAuth2.0'a güncellemesinden sonra. Bu yöntem artık işe yaramaz.
lusemia

12
Keşke bu yaklaşımla ilgili uyarıyı dikkate alsaydım. Bugün birdenbire erişim belirteçlerinin formatı değişmiş gibi göründüğü için pantolonumuzla yakalandık. Bu yaklaşımdan kaçınmanızı ve kabul edilen cevaba gitmenizi şiddetle tavsiye ederim.
Todd Menier

2
bu şimdiye kadar gördüğüm en komik cevap: D
khunshan

Ayrıca, bunun gibi yöntemlerin verilen kullanıcı kimliğini doğrulamadığını unutmayın - herhangi biri istediği kimliği ekleyebilir ve bu kod körü körüne güvenir.
Matt Lyons

7

OnSuccess'te aşağıdaki kodu kullanabilirsiniz (LoginResult loginResult)

loginResult.getAccessToken (). getUserId ();


6

Sadece başka bir Grafik API'sine ulaşmanız gerekiyor:

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

Ayrıca e-posta kimliğinizi ve kullanıcı kimliğinizi (Facebook için) verecektir.


Bundan sadece provider_id ve name alıyorum, Ama facebook'tan kullanıcı adı alamıyorum. Gibi bağlantı Bu doğrudan açık kullanıcıların profil, sağlayıcı kimliği ile o çalışmıyor olacaktır kullanıcı adıdır.
Salman Riyaz

3

En yeni API ile, işte bunun için kullandığım kod

/*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"]);

Fikri anladım, ancak kullanıcı kimliğini yalnızca belirteci döndürmüyor.
János

Bu cevabın 2 yaşında olduğunu unutmayın. SDK'nın bazı kısımlarını değiştirmiş olabilirler
AndrewSmiley

2

FacebookSDK v2.1'de (eski sürümü kontrol edemiyorum). Sahibiz

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

Ancak FacebookSDK'daki yoruma göre

@discussion Bu, iOS sistem hesabı gibi oturum açma davranışları için doldurulmayabilir.

Öyleyse, mevcut olup olmadığını kontrol etmeli ve sonra kullanıp kullanmadığınızı veya kullanıcı kimliğini almak için isteği aramalısınız.


0

Şuna bak cevabı kimliği yanıt almak için nasıl açıklanır. Öncelikle, veri alma yöntemi oluşturmanız gerekir:

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

Ardından yönteminizi istediğiniz zaman kullanın, şöyle:

getFbData(access_token, '/me?fields=id&', (result) => {
      console.log(result);
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.