Проблема с перенаправлением uri для входа Facebook в PHP

#php #facebook #facebook-graph-api #redirect #url-redirection

#php #Facebook #facebook-graph-api #перенаправление

Вопрос:

f_config.php

 <?php
include_once("f_src/facebook.php"); //include facebook SDK
######### Facebook API Configuration ##########
$appId = '<appid>'; //Facebook App ID
$appSecret = '<appsecret>'; // Facebook App Secret
$homeurl = 'http://example.com/login_beta.php';  //return to home
$fbPermissions = 'email';  //Required facebook permissions

//Call Facebook API
$facebook = new Facebook(array(
  'appId'  => $appId,
  'secret' => $appSecret

));
$fbuser = $facebook->getUser();
?>
  

login.php

 include_once("f_config.php");

if(!$fbuser){
    $fbuser = null;
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions));
}else{
    $user_profile = $facebook->api('/me?fields=id,first_name,last_name,email,gender,locale,picture');
    $_SESSION['facebook_data'] = $user_profile; // Storing Facebook User Data in Session
    //var_dump("Asd");
    header("location: index.php");
}
//..
//..

    <?php
          if(!$fbuser){
            $fbuser = null;
           $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions));
 echo '<a class="btn btn-sm btn-info" href="'.$loginUrl.'"><i class="icon icon-facebook icon-2x"> </i><span style="font-size: 16px; padding: 0 16px;">Continue With Facebook</span></a>';


}

 ?>
  

Когда я пытаюсь войти в Facebook с учетной записью разработчика, он отлично авторизует приложение и попадает в index.php
Однако, когда я пытаюсь войти в систему с какой-либо другой учетной записью Facebook, она автоматически авторизует приложение, а затем перенаправляет обратно на login.php с помощью code = <somerandomvalue> и затем снова требуется нажать кнопку Facebook login для перенаправления на index.php .

Я следую этому примеру:http://www.codexworld.com/login-with-facebook-using-php /

Ответ №1:

Я попытался отладить, и, похоже, проблема с перенаправлением URL с доменом, включая www. Это типично для перенаправления между URL-адресами, на которых есть и нет www., и приводит к тому, что сеанс больше не соответствует варианту доменного имени.

Решение: я включил приведенные ниже строки перед началом сеанса

 ini_set('session.cookie_domain', '.example.com');
session_set_cookie_params(0, '/', '.example.com');
  

и в файле .htaccess добавлены строки ниже, которые удаляют URL формы www.

 RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]