使用Facebook进行PHP登录时出现无限重定向循环问题

3

我在使用Facebook登录和PHP时遇到了问题。

下面的文件似乎是引起问题的原因。 一切正常,直到我成功使用Facebook登录,当浏览器重定向回到这个文件时,它最终会抛出无限重定向错误。最后的else语句总是被执行,导致循环...

有什么想法吗? 提前感谢!

<?php


require 'facebook/facebook.php';
require 'config/fbconfig.php';
require 'config/functions.php';

$facebook = new Facebook(array(
            'appId' => APP_ID,
            'secret' => APP_SECRET,
            ));

$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }


    if (!empty($user_profile )) {
        # User info ok? Let's print it (Here we will be adding the login and registering routines)

        $username = $user_profile['name'];
    $uid = $user_profile['id'];
    $email = $user_profile['email'];
        $user = new User();
        $userdata = $user->checkUser($uid, 'facebook', $username,$email,$twitter_otoken,$twitter_otoken_secret);

        if(!empty($userdata)){
            session_start();
            $_SESSION['id'] = $userdata['id'];
        $_SESSION['oauth_id'] = $uid;
        $_SESSION['username'] = $userdata['username'];
        $_SESSION['email'] = $email;
            $_SESSION['oauth_provider'] = $userdata['oauth_provider'];
            header("Location: home.php");
        }
    } else {
        # For testing purposes, if there was an error, let's kill the script
        die("There was an error.");
    }
} else {
    # There's no active session, let's generate one
    $login_url = $facebook->getLoginUrl(array( 'scope' => 'email'));
    header("Location: " . $login_url);
}
?>

尝试注释掉 header("Location: home.php");header("Location: " . $login_url);,然后看看是否仍然卡住了... - Matthew Blancarte
当您将session_start();放在页面顶部时会发生什么?根据服务器端应用程序的登录,需要会话。然后,您将从请求中获取状态的$_GET['code'] - Jon
1个回答

2

我遇到了同样的问题,在base_facebook.php文件中

请查找:

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.2'
  );

并添加以下两行

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false

所以您有

public static $CURL_OPTS = array(
     CURLOPT_CONNECTTIMEOUT => 10,
     CURLOPT_RETURNTRANSFER => true,
     CURLOPT_TIMEOUT        => 60,
     CURLOPT_USERAGENT      => 'facebook-php-3.2',
     CURLOPT_SSL_VERIFYPEER => false,
     CURLOPT_SSL_VERIFYHOST => false
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接