2011-02-01 31 views
7

cuando el usuario acepta la aplicación de Facebook desde mi sitio web, estoy almacenando los detalles del usuario y los detalles de Facebook (token de acceso) en la base de datos.El usuario de Facebook desautoriza la aplicación

cuando él elimina mi aplicación de Facebook quiero eliminar el detalle de la base de datos. ¿como hacer esto?

Puedo dar de baja la URL de devolución de llamada. si alguien elimina la aplicación, se redireccionará a esta página. pero, ¿debería ser el código aquí para eliminar los datos de db? Quiero decir, cuando redirija, publicará los detalles del token de acceso, para que pueda cargar el token de acceso y eliminar esa fila.

+1

No tomaría más tiempo averiguarlo que escribir aquí la pregunta. Cree una página que envíe por correo electrónico los contenidos de $ _REQUEST/$ _ GET/$ _ POST. Haz que tu URL de devolución de llamada. Autoriza y luego desautorizate a ti mismo. Verifique el correo electrónico y sabrá exactamente qué datos tiene disponibles. –

Respuesta

13

Está claramente establecido en la authentication document:

App desautorización

Cuando un usuario de la aplicación elimina en la App tablero de instrumentos o bloquea la aplicación en el News Feed, su aplicación puede ser notificada especificando una desautorización de URL de devolución de llamada en la aplicación de desarrollador. Durante la eliminación de la aplicación enviaremos una solicitud HTTP POST que contiene un único parámetro , signed_request, que contiene el ID de usuario (UID) del usuario que acaba de eliminar su aplicación. Va a no recibir un token de acceso de usuario en esta solicitud y todos los tokens de acceso de usuario existentes serán automáticamente caducados.

Así, utilizando la función signed_request en su propia docuement:

<?php 
function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$result = parse_signed_request($_REQUEST['signed_request'],"APP_SECRET"); 


$myFile = "deauthorize.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
fwrite($fh, $result["user_id"] . "\n"); 
fclose($fh); 

?> 

Así que todo lo que tiene que hacer es conseguir la $result["user_id"] consulta su base de datos y eliminar el registro.

P.S: Yo recomendaría agregar un nuevo campo llamado active y simplemente desactivar al usuario en lugar de eliminar el registro todos juntos.

EDIT:
Facebook no va a redirigir al usuario a la URL Retirar autorización! que va a hacer ping a tan sólo:

pings de Facebook esta URL cuando un usuario deauthorizes su aplicación

+0

Esto es exactamente lo que se necesita.No olvides reemplazar APP_SECRET con tu app_secret real. – testing123

0

Este código no está funcionando, a pesar de que se llama cuando un usuario deauthorizes la aplicación pasaron los únicos datos en la función es un "1" (Probado con usuario de prueba y mi propia cuenta FB cuando la aplicación está activa)

file_put_contents ("test.txt", $ fbUserId. "". print_r ($ _ REQUEST ['signed_request']));

en el archivo test.txt "1"

Cuestiones relacionadas