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

Tengo una aplicación de escritorio de Facebook y estoy usando la API gráfica. Puedo obtener el token de acceso, pero una vez hecho esto, 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 para 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?

preguntado el 23 de agosto de 10 a las 07:08

8 Respuestas

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=...

Respondido 23 ago 10, 16:08

Probé la llamada exacta anterior: solo devuelve: {"success": true} - Pablo Kenjora

Esto ya no devuelve la identificación. Usar: https://graph.facebook.com/me?fields=id&access_token=xxxxxx - M3RS

¿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. - Hormiga

@ ¿No necesitas implementar Iniciar sesión en FaceBook para obtener el token de acceso - Zeeshan Ahmad Khalil

¿Cómo puedo buscar / obtener el nombre de usuario? Estoy usando passport-facebook con nodsjs. Mis alcances son: ['public_profile', 'user_gender', 'user_managed_groups', 'pages_show_list', 'email'] Y, al llamar a passport-facebook, los campos de perfil son: profileFields: ['id', 'nombre', ' email ',' gender ',' birthday ',' displayName ',' picture.type (large) '] Alguna idea, ¿cómo puedo obtener el nombre de usuario? (Solo para referencia: si el perfil es facebook.com/charels.woodson, luego quiero "charels.woodson") - Shivam Verma

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.

Respondido 24 Oct 12, 10:10

{"error": {"mensaje": "(# 100) Campos desconocidos: userid.", "type": "OAuthException", "code": 100}} - Nikolái Kuznetsov

@NikolayKuznetsov: lo siento hombre, en pasar por alto en lugar de id escribí ID de usuario, he editado ahora, inténtalo de nuevo pashaplus

No hay problema, ya lo probé, así que publico mi comentario anterior. - Nikolái Kuznetsov

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

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 obtienes

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.

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

Respondido 12 Jul 13, 00:07

Funciona perfectamente antes, pero después de la actualización de Facebook a OAuth2.0. Este método ya no puede funcionar. - lucemia

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

esa es la respuesta más divertida que he visto en mi vida: D - Khunshan

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

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

loginResult.getAccessToken (). getUserId ();

Respondido 25 ago 15, 17:08

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).

Respondido 13 Jul 17, 07:07

Obtengo solo el provider_id y el nombre de eso, pero no obtengo el nombre de usuario de Facebook. Como aquí, Este es el nombre de usuario que abrirá directamente el perfil de los usuarios, con la identificación del proveedor no funciona. - Salman Riyaz

Con la API más nueva, 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"]);

contestado el 20 de mayo de 15 a las 04:05

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

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

Respondido el 25 de Septiembre de 14 a las 11:09

Mira este pequeño https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be, 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);
});

respondido 22 mar '19, 12:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.