2016-11-27 3 views
-1

Я проверил все предыдущие вопросы, связанные с Stackoverflow. Но никто из них не такой же, как мой. Я внедрил логин Facebook для своего сайта. Его работа хорошая. Но проблема в том, что после входа в систему страница перенаправляется на сайт Facebook вместо перенаправления на мой сайт.php - Facebook перенаправить после входа в систему не работает

Мои коды ниже. Я не сильно изменился из официальной документации разработчиков Facebook.

login.php

<?php 

session_start(); 
require_once __DIR__ . '/Facebook/autoload.php'; 
$fb = new Facebook\Facebook([ 
    'app_id' => '****', 
    'app_secret' => '****', 
    'default_graph_version' => 'v2.2', 
    ]); 

$helper = $fb->getRedirectLoginHelper(); 
$permissions = ['email', 'user_likes']; // optional 
$loginUrl = $helper->getLoginUrl('http://example.com/login-callback.php', $permissions); 

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>'; 

?> 

Логин-callback.php

<?php 

# login-callback.php 
session_start(); 
require_once __DIR__ . '/Facebook/autoload.php'; 
$fb = new Facebook\Facebook([ 
    'app_id' => '****', 
    'app_secret' => '****', 
    'default_graph_version' => 'v2.2', 
    ]); 

$redirectloc = $_SERVER['HTTP_REFERER']; 
$helper = $fb->getRedirectLoginHelper(); 
try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 


if (isset($accessToken)) { 
    // Logged in! 
    $_SESSION['facebook_access_token'] = (string) $accessToken; 
    header("Location:$redirectloc"); 
exit(); 
    // Now you can redirect to another page and use the 
    // access token from $_SESSION['facebook_access_token'] 
} elseif ($helper->getError()) { 
    // The user denied the request 
    exit; 
} 

?> 

Когда я вошел в уже в моем аккаунте в Facebook от того же браузера, и пытается войти в систему с моего сайта, его отлично работает. i.e header("Location:$redirectloc"); в login-callback.php работает должным образом. Его перенаправление на login.php.

Теперь, если я выйду из своей учетной записи Facebook из браузера и попытаюсь войти с моего сайта, его запрос на идентификатор и пароль Facebook будет нормальным.

Но после ввода идентификатора пользователя и пароля его перенаправление на домашнюю страницу Facebook вместо перенаправления на login.php.

+3

Ну, потому что референт содержит URL-адрес facebook. Вам нужно сохранить местоположение в сеансе, а затем вспомнить старое местоположение и перенаправить пользователя обратно на него. –

+0

Отлично, я жестко закодировал код перенаправления и его работу. Благодарю. Теперь я знаю, где проблема. Но как перенаправить на предыдущую страницу после входа? – Arijit

+0

@CharlotteDunois, пожалуйста, разместите его как ответ, чтобы я мог его принять. – Arijit

ответ

1

Этот вопрос исходит от референта и ожидается. Референт, отправленный браузером, содержит URL-адрес, из которого он пришел. Поскольку вы были на Facebook, референт будет содержать URL facebook.com (возможно, больше, чем просто домен). Если вы оставите перенаправление до facebook.com (из-за уже вошедшего в систему), референт содержит последнюю посещенную страницу вашего сайта.

Решение этой проблемы заключается в том, чтобы перенаправить пользователя на Facebook, сохранить референта в сеансе и затем перенаправить на Facebook. Затем в login-callback.php вы можете прочитать местоположение перенаправления из сеанса и использовать его для header("Location: ...").

Смежные вопросы