Я получил это от nettuts, может кто-то, пожалуйста, скажите мне, почему я получаю ошибку «перенаправление страницы неправильно»?
<?php # We require the library require("facebook.php"); # Creating the facebook object $facebook = new Facebook(array( 'appId' => 'APP_ID_HERE', 'secret' => 'APP_SECRET_HERE', 'cookie' => true )); # Let's see if we have an active session $session = $facebook->getUser(); if(!empty($session)) { # Active session, let's try getting the user id (getUser()) and user info (api->('/me')) try{ $uid = $facebook->getUser(); # req_perms is a comma separated list of the permissions needed $url = $facebook->getLoginUrl(array( 'req_perms' => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos' )); header("Location: $url"); } catch (Exception $e){} } else { # There's no active session, let's generate one $login_url = $facebook->getLoginUrl(); header("Location: ".$login_url); }
Вы перенаправляете аутентифицированный пользователь в $facebook->getLoginUrl(array(...))
, создавая цикл перенаправления.
Вы должны перенаправлять только не прошедших проверку пользователей (перенаправление с req_perms
должно быть в разделе else
). Перенаправление в try
должно происходить только в том случае, если вы обнаружите, что пользователь не предоставил вам все необходимые разрешения.
Вы можете проверить предоставленные разрешения, вызвав:
$perms = $facebook->api(array( 'method' => 'fql.query', 'query' => 'SELECT email,user_birthday,status_update,publish_stream,user_photos,user_videos FROM permissions WHERE uid=' . $facebook->getUser() ));
<?php # We require the library require("facebook.php"); # Creating the facebook object $facebook = new Facebook(array( 'appId' => 'APP_ID_HERE', 'secret' => 'APP_SECRET_HERE', 'cookie' => true )); # Let's see if we have an active session $session = $facebook->getUser(); if(empty($session)) { # There's no active session, let's generate one $url = $facebook->getLoginUrl(array( 'req_perms' => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos' )); header("Location: $url"); exit; } // user is logged in
Если вы используете последний PHP SDK, было сделано несколько изменений, и разрешения, которые вы запрашиваете, не работают.
Вот обновленный код.
<?php # We require the library require("facebook.php"); # Creating the facebook object $facebook = new Facebook(array( 'appId' => 'APP_ID_HERE', 'secret' => 'APP_SECRET_HERE', 'cookie' => true )); # Let's see if we have an active session $session = $facebook->getUser(); if(empty($session)) { # There's no active session, let's generate one $url = $facebook->getLoginUrl(array( "response_type"=>"token", //Can also be "code" if you need to "scope" => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos' , "redirect_uri"=> "http://test.com" //Your app callback url )); header("Location: $url"); exit; } // user is logged in
Дополнительная информация: http://developers.facebook.com/docs/authentication/