2016-11-27 7 views
-1

나는 이것과 관련된 모든 Stackoverflow 이전 질문을 확인했습니다. 그러나 그들 중 누구도 내 것과 같지 않습니다. 내 웹 사이트에 Facebook 로그인을 구현했습니다. 그 좋은 일. 하지만 문제는 로그인 후 페이지가 내 웹 사이트로 리디렉션하는 대신 Facebook 홈으로 리디렉션되는 것입니다.php - 로그인 후 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; 
} 

?> 

그 완벽하게 작동합니다. 예 : login-callback.php의 header("Location:$redirectloc");이 예상대로 작동합니다. 그것 login.php로 리디렉션.

지금 브라우저에서 내 Facebook 계정에서 로그 아웃 한 다음 내 웹 사이트에서 로그인하려고하면 정상적인 Facebook ID와 비밀번호를 묻습니다.

하지만 login.php로 리디렉션하지 않고 Facebook 홈 페이지로 리디렉션하는 사용자 아이디와 비밀번호를 입력 한 후.

+3

글쎄, 리퍼러에는 페이스 북의 URL이 포함되어 있기 때문에. 필요한 것은 세션의 위치를 ​​저장 한 다음 이전 위치를 호출하고 사용자를 다시 세션으로 리디렉션하는 것입니다. –

+0

좋아요, 나는 리디렉션 코드와 그 코드를 하드 코딩했습니다. 감사. 이제 나는 문제가 어디 있는지 알고있다. 하지만 로그인 한 후 정확한 이전 페이지로 리디렉션하는 방법은 무엇입니까? – Arijit

+0

@CharlotteDunois 답변으로 게시하여 받아 들일 수 있도록하십시오. – Arijit

답변

1

이 문제는 referer에서 비롯된 것으로 예상됩니다. 브라우저에서 보낸 referer에는 URL의 출처가 포함됩니다. 당신이 Facebook에 있었기 때문에, referer는 URL facebook.com (단지 도메인 이상)을 포함 할 것입니다. 리디렉션을 facebook.com (이미 로그인했기 때문)으로 두지 않으면 리퍼러에 마지막으로 방문한 페이지가 포함됩니다.

이 문제의 해결책은 사용자를 Facebook으로 리디렉션하기 전에 세션에서 리퍼러를 저장 한 다음 Facebook으로 리디렉션하는 것입니다. 그런 다음 login-callback.php에서 세션에서 리디렉션 위치를 읽고 header("Location: ...")에 사용할 수 있습니다.

관련 문제