5

ドキュメント: "redirect_uri - (オプション)ログイン/認証プロセスが完了した後にユーザをリダイレクトするURLです。ログインの成功と失敗の両方のURL。したがって、認証のドキュメントに記載されているURLのエラーパラメータをチェックする必要があります。このプロパティが指定されていない場合、ユーザーは現在のURLにリダイレクトされますメソッドが呼び出されました。通常、ユーザーのブラウザの現在のURLです)。 したがって、ユーザーが覚書/許可を拒否したが、対応するドキュメントへのリンクがもう存在しない場合には(https://developers.facebook.com/docs/authentication/)、キャッチする方法があります。簡単にするためにfacebook php sdk - ユーザが許可しなかった場合にキャッチ(認証に失敗しました)

、REDIRECT_URIが始まるのphpファイルと同じアドレスであり、PHPのコードは同じくらい簡単です:誰もがその情報をキャッチする方法を知っている

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

?アクセス許可を確認するために次の操作を行うことができます

答えて

11

$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

それが唯一の選択肢であるように見えます今すぐ利用可能...奇妙なことに、私は他のやり方をする方法があると確信しています;) –

0

最新のPHPのFacebookのSDKには、方法がないことに留意すべきである - > API。また、このチェックを使用して権限を取得する際に問題が発生することがあります。 FBアクセストークンデバッガのチェックで適切な権限が示されていたとしても、古いSDKを使用すると、ユーザーによってはランダムに表示されることがありましたが、一部のユーザーが「OAuthException :(#412)ユーザーがアプリケーションをインストールしませんでした。新しいSDKに更新して、簡単なアクセス許可のデータリストを取得する新しい方法を見つけたら、すべてが再び機能しました。

このソリューションを見つけるために私はFBウェブサイトを掘り下げていました。そこで、ここに貼り付けて、他の誰かを救うためにここに貼り付けます。彼らは実際の人生の保護者は私の発見getDecodedBodyメソッド(非常に難しいFBドックを見つけるために)でした。私の例では、単に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

私はちょうど私がアクションをキャンセル(両方のFacebookのPHPのAPIとGoogleのOAuth2で)を治療する方法を知りませんでした、同じ問題がありました。

解決策は予想以上に簡単です。

許可の場合の応答では、URLに少なくとも1つのパラメータ/変数:エラーがあります。 Facebookので

は、応答は次のように見えること:

エラー= & ERROR_CODE = 200 &ましたerror_description =権限+エラー& ERROR_REASONをACCESS_DENIED = user_denied

グーグルのためにあなたが取得のみ

エラー= access_denied

でも十分です。

エラーが設定されているかどうかを確認しています。設定されている場合は、ログインページに応答をリダイレクトしています。

本当にこのステップが文書化されていないので、誰かを助けてくれることを願っています。ところで :FacebookのAPIの 版:GoogleのAPIのOAuth2のV5 バージョン:2.0(私は考える - それは最新バージョンを見つけることになるとGoogleドキュメントは本当にめちゃくちゃです)

関連する問題