2011-08-27 30 views
0

我从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); 
} 
+2

如果发生异常,用它做什么。 *永远不要*扔掉它。 –

回答

4

您重定向身份验证的用户$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 
+0

你能帮我解决我上面粘贴的代码吗? :(,我不明白你的意思 – sasori

+0

我添加了修改后的代码到我的答案 – Crack

0

如果您使用的是最新的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/

相关问题