5

La documentazione dice: "redirect_uri - (opzionale) L'URL per reindirizzare l'utente a una volta che il processo di accesso/autorizzazione è stato completato. URL sia in caso di esito positivo che negativo, quindi è necessario verificare i parametri di errore nell'URL come descritto nella documentazione di autenticazione.Se questa proprietà non è specificata, l'utente verrà reindirizzato all'URL corrente (ovvero l'URL della pagina in cui è presente è stato chiamato il metodo, in genere l'URL corrente nel browser dell'utente). " Quindi c'è un metodo da rilevare se l'utente ha rifiutato l'autenticazione/permessi, ma il collegamento alla documentazione corrispondente non esiste più (https://developers.facebook.com/docs/authentication/).facebook php sdk - cattura se l'utente non ha dato permessi (autenticazione fallita)

Per la semplicità, redirect_uri è lo stesso indirizzo di un file che inizia php, e il codice php è semplice come:

require 'facebook.php'; 
$facebook = new Facebook(array(
    'appId' => 'X', 
    'secret' => 'Y', 
)); 
$user = $facebook->getUser(); 
if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
if (!$user) { 
    $params = array(
    'scope' => 'read_stream, friends_likes', 
    'redirect_uri' => 'http://myapp.com/app' 
); 
    $loginUrl = $facebook->getLoginUrl($params); 
} 

qualcuno sa come catturare queste informazioni?

risposta

11

Si può fare in seguito per controllare i permessi:

$permissions = $facebook->api("/me/permissions"); 
if(array_key_exists('publish_stream', $permissions['data'][0])) { 
    // Permission is granted! 
    // Do the related task 
    $post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!')); 
} else { 
    // We don't have the permission 
    // Alert the user or ask for the permission! 
    header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream"))); 
} 
+0

Sembra che sia l'unica opzione disponibile ora ... Strano, scommetterei, che c'era un modo per farlo in un altro modo;) –

0

Va notato che nel nuovissimo SDK PHP facebook, non esiste un metodo -> api. Sembra anche che ci sia un problema nell'usare questo controllo (a volte) per ottenere le autorizzazioni. Quando si utilizza il vecchio SDK, a volte (a caso all'utente sembrava che alcuni utenti ricevessero "OAuthException: (# 412) L'utente non ha installato l'applicazione" anche se un controllo del debugger token di accesso FB mostrava le autorizzazioni appropriate. Dopo essermi aggiornato al nuovo SDK e capito il nuovo modo di ottenere un semplice elenco di dati delle autorizzazioni, tutto ha funzionato di nuovo.

Per trovare questa soluzione sono riuscito a scavare molto nel sito Web di FB, quindi l'ho incollato qui per sperare di salvare qualcun altro per qualche ora. La vera scoperta della vita è stata la mia scoperta del metodo getDecodedBody (un trucco molto difficile da trovare nei documenti FB). Il mio esempio controlla solo publish_actions.

$fb = new Facebook\Facebook([ 
    'app_id' => your_app_id, 
    'app_secret' => your_secret, 
    'default_graph_version' => 'v2.2', 
]); 

$badperms=true; //start by assume bad permissions 

try { 
    $response = $fb->get('/me/permissions', $at); 
    $perms = $response->getDecodedBody(); 

    if($badperms){ 
     foreach($perms['data'] AS $perm){ 
      if($perm['permission']=='publish_actions' && $perm['status']=='granted') $badperms=false; 
     } 
    } 

} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    log("MSG-received facebook Response exception!! ".$e->getMessage()); 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    log("MSG-received facebook SDK exception!! ".$e->getMessage()); 
} 

if($badperms) { 
    //do something like reflow auth 
} 
0

Ho appena avuto lo stesso problema, non sapevo come trattare l'azione annullare (sia in facebook php API e Google OAuth2).

La soluzione è molto più semplice del previsto.

La risposta in caso di autorizzazione non accettata (a tutti) viene fornita con almeno un parametro/variabile: errore nell'URL.

In facebook che risposta assomiglia:

errore = ACCESS_DENIED & error_code = 200 & ERROR_DESCRIPTION = Permessi + errore & ERROR_REASON = user_denied

per Google si ottiene solo il

error = access_denied

ma dovrebbe essere sufficiente.

Sto solo verificando se l'errore è impostato e se è impostato sto reindirizzando la risposta alla mia pagina di accesso.

Spero che possa aiutare qualcuno perché in realtà non è documentato questo passaggio. A proposito: versione di Facebook API: v5 versione di Google API OAuth2: 2.0 (credo - google doc è veramente un casino quando si tratta di trovare le versioni più recenti)

Problemi correlati