Cómo obtener la identificación de usuario de Facebook usando el token de acceso

89

Tengo una aplicación de escritorio de Facebook y estoy usando Graph API . Puedo obtener el token de acceso, pero después de eso, no sé cómo obtener la identificación del usuario.

Mi flujo es así:

  1. Envío al usuario a https://graph.facebook.com/oauth/authorize con todos los permisos extendidos requeridos.

  2. En mi página de redireccionamiento obtengo el código de Facebook.

  3. Luego realizo una solicitud HTTP a graph.facebook.com/oauth/access_token con mi clave API y obtengo el token de acceso en la respuesta.

A partir de ese momento no puedo obtener la identificación de usuario.

¿Cómo se puede solucionar este problema?

Mohoch
fuente

Respuestas:

153

Si desea utilizar Graph API para obtener el ID de usuario actual, simplemente envíe una solicitud a:

https://graph.facebook.com/me?access_token=...
serg
fuente
1
Probé la llamada exacta anterior: solo devuelve: {"success": true}
Paul Kenjora
4
Esto ya no devuelve la identificación. Uso:https://graph.facebook.com/me?fields=id&access_token=xxxxxx
M3RS
2
¿Qué es el 'access_token'? Intenté usar el token de acceso a la página y el token de acceso del usuario. Recibo respuestas de 'token no válido' usando esto.
Ant
34

La forma mas facil es

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

luego obtendrá la respuesta json que contiene solo el ID de usuario.

pashaplus
fuente
1
{"error": {"message": "(# 100) Campos desconocidos: userid.", "type": "OAuthException", "code": 100}}
Nikolay Kuznetsov
1
@NikolayKuznetsov: lo siento hombre, en pasar por alto en lugar de id escribí ID de usuario , lo
edité
1
No hay problema, ya lo probé, así que publico mi comentario anterior.
Nikolay Kuznetsov
2
Recibo el siguiente error Mi token de acceso está activo. {"error": {"message": "Se debe utilizar un token de acceso activo para consultar información sobre el usuario actual", "type": "OAuthException", "code": 2500, "fbtrace_id": "HA0UNBRymfa"} }
Ajit Goel
cuál es el token de acceso y de dónde obtenerlo
Prime
10

El token de acceso a Facebook también se ve similar "1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc"

si extrae la parte del medio usando | para dividir tienes

2.h1MTNeLqcLqw __. 86400.129394400-605430316

luego dividir de nuevo por -

la última parte 605430316 es la identificación del usuario.

Aquí está el código C # para extraer la identificación de usuario del token de acceso:

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

ADVERTENCIA: La estructura del token de acceso no está documentada y es posible que no siempre se ajuste al patrón anterior. Úselo bajo su propio riesgo.

Actualización debido a cambios en Facebook. el método preferido para obtener el ID de usuario del token de acceso cifrado es el siguiente:

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
fuente
5
Funciona perfectamente antes, pero después de la actualización de Facebook a OAuth2.0. Este método ya no puede funcionar.
lucemia
12
Ojalá hubiera prestado atención a la advertencia sobre este enfoque. Nos pillaron con los pantalones bajados hoy porque, de repente, el formato de los tokens de acceso parece haber cambiado. Recomiendo encarecidamente evitar este enfoque y seguir la respuesta aceptada.
Todd Menier
2
Esa
También tenga en cuenta que métodos como este no verifican la ID de usuario dada: cualquiera podría empalmar la identificación que desee y este código confiaría ciegamente en él.
Matt Lyons
7

Puede usar el siguiente código en onSuccess (LoginResult loginResult)

loginResult.getAccessToken (). getUserId ();

Andante del cielo
fuente
6

Solo tienes que presionar otra API Graph:

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

También le dará su identificación de correo electrónico y la identificación de usuario (para Facebook).


fuente
Solo obtengo el provider_id y el nombre de eso, pero no obtengo el nombre de usuario de Facebook. Como enlace , este es el nombre de usuario que abrirá directamente el perfil de los usuarios, con la identificación del proveedor no funciona.
Salman Riyaz
3

Con la API más reciente, aquí está el código que utilicé

/*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
fuente
Tengo la idea, pero no devuelve el ID de usuario solo el token.
János
Tenga en cuenta que esta respuesta tiene 2 años. Es posible que hayan cambiado algunas partes del SDK
AndrewSmiley
2

en FacebookSDK v2.1 (no puedo verificar la versión anterior). Tenemos

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

Sin embargo, según el comentario en FacebookSDK

@discussion Es posible que esto no se complete para los comportamientos de inicio de sesión, como la cuenta del sistema iOS.

Por lo tanto, debe verificar si está disponible y luego si usarlo o llamar a la solicitud para obtener la identificación del usuario

Gia Dang
fuente
0

Consulte esta respuesta , que describe cómo obtener una respuesta de identificación. Primero, necesitas crear un método para obtener datos:

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

Luego, simplemente use su método cuando lo desee, así:

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