2016-11-27 17 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

私は同じブラウザから自分のFacebookのアカウントに既にログインし、私のウェブサイトからログインしようとしています
<?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にリダイレクトするのではなく、ユーザーのIDとパスワードを入力してFacebookのホームページにリダイレクトした後。

+3

リファラーにはFacebookのURLが含まれているためです。必要なのは、セッションの場所を保存してから、古い場所を呼び出して、その場所にユーザーをリダイレクトすることです。 –

+0

すごく、私はリダイレクトコードとその作業をハードコードしました。ありがとう。今私は問題がどこにあるか知っています。しかし、ログイン後に正確な前のページにリダイレクトする方法はありますか? – Arijit

+0

@CharlotteDunois私はそれを受け入れることができるように、答えとして投稿してください。 – Arijit

答えて

1

この問題はリファラーからのものであり、期待されています。ブラウザから送信されたrefererには、そのURLが含まれています。あなたがFacebook上にいたので、リファラーにはURL facebook.com(おそらく単なるドメイン以上のもの)が含まれます。 facebook.comへのリダイレクトを省略した場合(すでにログインしているため)、リファラーにはサイトの最後にアクセスしたページが含まれます。

この問題の解決策は、ユーザーをFacebookにリダイレクトする前に、セッションでリファラーを保存してからFacebookにリダイレクトすることです。 login-callback.phpでは、セッションからリダイレクト先を読み取ってheader("Location: ...")に使用できます。