どのようにFacebookにログインさせるのか正確にはわかりませんが、個人的には次を使用します。
if ($fbinfo['facebook_app_id']) {
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => $fbinfo['facebook_app_id'],
'secret' => $fbinfo['facebook_app_secret'],
));
// Get User ID
$user = $facebook->getUser();
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
if (!$_SESSION['extened_fb_token']) {
// ask for the extended token and get it from session ...
$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".FB_APP_ID."_access_token"];
// now set it into the facebook object ....
$facebook->setAccessToken($access_token);
// now our fb object will use the new token as usual ...
setCompanyFacebookExtendedToken($facebook->getAccessToken());
}
//print_r($_SESSION);
//print_r(facebookGetUserPages($user));
//echo $_SESSION['extened_fb_token'];
} else {
$loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
}
これで、私はすでにデータベースにクエリを実行して、アプリキーが何であるかを調べました(データベースに「会社」があり、それぞれがユーザー用に独自のfbアプリを持つことができるため)。彼らの情報を使用して、FacebookAPIを使用してログインしているかどうかを確認します。そうでない場合は、ログインURLを生成します。ログインすると、$user
FacebookユーザーIDが含まれます。これを自分のデータベースで照会して、実際にどのユーザーであるかを確認できます。trueのifステートメント内で、$user
そのユーザーの電子メールアドレスをプルして自分の$_SESSION['user']
変数に割り当てるdb呼び出しを行うことができます。したがって、あなたにとっては、次のようになります。
if (isset($_POST)) {
//Handle your post normally here
}else{
if ($fbinfo['facebook_app_id']) {
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => $fbinfo['facebook_app_id'],
'secret' => $fbinfo['facebook_app_secret'],
));
// Get User ID
$user = $facebook->getUser();
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
//This is just getting an extended token that is good for 60 days
if (!$_SESSION['extened_fb_token']) {
// ask for the extended token and get it from session ...
$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".FB_APP_ID."_access_token"];
// now set it into the facebook object ....
$facebook->setAccessToken($access_token);
// now our fb object will use the new token as usual ...
setCompanyFacebookExtendedToken($facebook->getAccessToken());
}
include"myconfig.php";
//The email from fb has already been inserted into my mysql users table...
$query = sprintf("SELECT * FROM users WHERE fb_id = %s",$user);
$res = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($res);
echo($row['user_name']);
echo "<b> EMAIL : </b>" . $row['user_email'];
$_SESSION['user'] = $row['user_email'];
} else {
$loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
}
}
編集
申し訳ありませんが、これはあなたの質問に完全には答えていなかったと思います。実際には、独自のユーザーセッション変数の名前を変更するか、Facebookでログインしたら、Facebookから必要なデータを取得し、セッション変数を上書きします(基本的には、Facebookからログアウトしますが、必要なデータはすでに取得しています。とにかくFacebook)。実際、Facebookにログインするために必要なのはトークンだけだと思いますが、ページが読み込まれるたびにユーザーセッション変数が上書きされる可能性があるため、Facebookセッションを完全に削除する必要があります。または、セッション変数の名前を変更するだけです。
(私はまだfacebook apiを初めて使用するので、これが理にかなっていることを願っています。)