【问题标题】:Why am I getting a "the page isn't redirecting properly" error?为什么我收到“页面未正确重定向”错误?
【发布时间】:2011-08-27 10:20:29
【问题描述】:

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

【问题讨论】:

  • 如果发生异常,请处理它。 永远不要扔掉它。

标签: php facebook


【解决方案1】:

您将经过身份验证的用户重定向到$facebook-&gt;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

【讨论】:

  • 你能帮我修复我上面粘贴的代码吗? :( ,我不明白你的意思
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多