web-dev-qa-db-ja.com

アクセストークンを使用してFacebookユーザーIDを取得する方法

Facebookデスクトップアプリケーションを使用しており、 Graph API を使用しています。アクセストークンを取得することはできますが、それが完了した後-ユーザーのIDを取得する方法がわかりません。

私の流れはこのようなものです:

  1. ユーザーをhttps://graph.facebook.com/oauth/authorizeに送信し、必要なすべての拡張権限を付与します。

  2. リダイレクトページで、Facebookからコードを取得します。

  3. 次に、APIキーを使用してgraph.facebook.com/oauth/access_tokenへのHTTPリクエストを実行し、レスポンスでアクセストークンを取得します。

その時点から、ユーザーIDを取得できません。

この問題はどのように解決できますか?

84
Mohoch

Graph APIを使用して現在のユーザーIDを取得する場合は、次の宛先にリクエストを送信します。

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

最も簡単な方法は

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

次に、useridのみを含むjson応答を取得します。

28
pashaplus

Facebookのアクセストークンも「1249203702 | 2.h1MTNeLqcLqw __。86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc」に似ています

|を使用して中間部分を抽出する場合あなたが分割する

2.h1MTNeLqcLqw __。86400.129394400-605430316

その後、再び-で分割します

最後の部分605430316はユーザーIDです。

アクセストークンからユーザーIDを抽出する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;
    }

警告:アクセストークンの構造は文書化されておらず、常に上記のパターンに適合するとは限りません。ご自身の責任で使用してください。

更新 Facebookの変更による。暗号化されたアクセストークンからユーザーIDを取得する好ましい方法は次のとおりです。

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

次のコードを使用できますonSuccess(LoginResult loginResult)

loginResult.getAccessToken()。getUserId();

7
SkyWalker

別のGraph APIを押すだけです:

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

また、電子メールIDとユーザーID(Facebook用)も提供します。

6
user8001109

最新のAPIで使用したコードは次のとおりです。

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

facebookSDK v2.1(古いバージョンをチェックできません)。我々は持っています

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

ただし、FacebookSDKのコメントによると

@discussionこれは、iOSシステムアカウントなどのログイン動作では設定されない場合があります。

したがって、利用可能かどうかを確認し、それを使用するか、リクエストを呼び出してユーザーIDを取得する必要があります

2
Gia Dang

これを確認してください answer 、これはIDレスポンスを取得する方法を説明しています。まず、メソッド取得データを作成する必要があります。

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);
});
0
chavy