액세스 토큰을 사용하여 Facebook 사용자 ID를 얻는 방법


89

Facebook 데스크톱 애플리케이션이 있고 Graph API를 사용하고 있습니다. 액세스 토큰을 얻을 수 있지만 그 후에는 사용자 ID를 얻는 방법을 모릅니다.

내 흐름은 다음과 같습니다.

  1. 필요한 모든 확장 권한을 사용 하여 사용자를 https://graph.facebook.com/oauth/authorize 로 보냅니다 .

  2. 내 리디렉션 페이지에서 Facebook에서 코드를 얻습니다.

  3. 그런 다음 API 키로 graph.facebook.com/oauth/access_token에 HTTP 요청을 수행 하고 응답에서 액세스 토큰을 얻습니다.

그 시점부터 사용자 ID를 얻을 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까?

답변:


153

Graph API를 사용하여 현재 사용자 ID를 얻으려면 다음 주소로 요청을 보내십시오.

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

1
다만 반환 : : : {사실 "성공"} 나는 정확한 위의 호출 시도
폴 Kenjora

4
더 이상 ID를 반환하지 않습니다. 사용 :https://graph.facebook.com/me?fields=id&access_token=xxxxxx
M3RS

2
'access_token'은 무엇입니까? 페이지 액세스 토큰과 사용자 액세스 토큰을 사용해 보았습니다. 이것을 사용하여 '유효하지 않은 토큰'응답을받습니다.
Ant

34

가장 쉬운 방법은

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

그러면 사용자 ID 만 포함 된 json 응답이 표시됩니다.


1
{ "error": { "message": "(# 100) 알 수없는 필드 : userid.", "type": "OAuthException", "code": 100}}
Nikolay Kuznetsov

1
@NikolayKuznetsov는 : 죄송합니다 사람이 대신 간과 ID 내가 쓴 사용자 ID , 난 다시 시도하십시오, 지금 편집
pashaplus

1
문제 없습니다. 이미 시도 했으므로 이전 댓글을 게시합니다.
Nikolay Kuznetsov

2
다음 오류가 발생합니다. My access token is active. { "error": { "message": "현재 사용자에 대한 정보를 쿼리하려면 활성 액세스 토큰을 사용해야합니다.", "type": "OAuthException", "code": 2500, "fbtrace_id": "HA0UNBRymfa"} }
아지트 고엘

액세스 토큰은 무엇이며 어디서 얻을 수 있습니까?
프라임

10

페이스 북 액세스 토큰도 비슷해 보입니다. "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;
}

5
이전에는 완벽하게 작동하지만 Facebook이 OAuth2.0으로 업데이트 한 후에는 작동합니다. 이 방법은 더 이상 작동하지 않습니다.
lucemia 2011 년

12
이 접근 방식에 대한 경고에주의를 기울 였으면합니다. 갑작스런 액세스 토큰의 형식이 변경된 것 같아 오늘 우리는 바지를 내려 놓았습니다. 이 접근 방식을 피하고 허용되는 답변으로 진행하는 것이 좋습니다.
Todd Menier 2011 년

2
가장 재미있는 답변을 먹으 렴 내가 지금까지 본 : D
khunshan

또한 이와 같은 메소드는 주어진 사용자 ID를 확인하지 않습니다. 누구든지 원하는 ID로 연결할 수 있으며이 코드는 맹목적으로 신뢰합니다.
Matt Lyons

7

onSuccess (LoginResult loginResult) 에서 아래 코드를 사용할 수 있습니다.

loginResult.getAccessToken (). getUserId ();


6

다른 Graph API를 누르기 만하면됩니다.

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

이메일 ID와 사용자 ID (Facebook 용)도 제공합니다.


나는 그로부터 provider_id와 이름 만 얻었지만 페이스 북에서 사용자 이름을 얻지 못했습니다. 링크 와 마찬가지로 이것은 사용자 프로필을 직접 열 수있는 사용자 이름이며 공급자 ID가 작동하지 않습니다.
Salman Riyaz

3

최신 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"]);

나는 아이디어를 얻었지만 토큰 만 userID를 반환하지 않습니다.
János

이 답변은 2 년 전입니다. 그들은 SDK의 일부를 변경 할 수 있습니다
AndrewSmiley

2

FacebookSDK v2.1에서 (이전 버전을 확인할 수 없습니다). 우리는

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

그러나 FacebookSDK의 댓글에 따르면

@discussion iOS 시스템 계정과 같은 로그인 동작에는 채워지지 않을 수 있습니다.

따라서 사용 가능한지 확인한 다음 사용 여부를 확인하거나 요청을 호출하여 사용자 ID를 가져와야 할 수 있습니다.


0

ID 응답을받는 방법을 설명 하는이 답변을 확인하십시오 . 먼저, 메소드 get 데이터를 생성해야합니다.

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);
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.