簡體   English   中英

使用Facebook PHP SDK v5注銷

[英]Logout with Facebook PHP SDK v5

我正在使用Facebook SDK v5,可以使用此腳本登錄,而在登錄時創建了一個cookie,如果我嘗試通過清除cookie退出而無法登錄!

這是我的登錄腳本

<?php
require_once __DIR__ . '/src/Facebook/autoload.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/fbloging/helper/helper.php';
$fb = new Facebook\Facebook([
'app_id' => '__MY_APP_ID__',
'app_secret' => '__MY_APP_SECRET__',
'default_graph_version' => 'v2.5'
]);

$helper = $fb->getJavaScriptHelper();

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

if (isset($accessToken)) {
$fb->setDefaultAccessToken($accessToken);

try {

$requestProfile = $fb->get("/me?fields=name,email,id,picture.width(800).height(800),cover.width(300).height(175)");
$profile = $requestProfile->getGraphNode()->asArray();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
}


$query = "SELECT * FROM `users` WHERE `user_id`='".$profile['id']."' AND `email`='".$profile['email']."'";
$result = $db->query($query);
$fr = mysqli_fetch_assoc($result);
if(mysqli_num_rows($result)>0){
if($fr['profile']==1){
set_user_cookie($profile['name'],$profile['id'],$profile['picture']['url'],$profile['email'],$profile['cover']['source']);
header('location: ../home.php');
}else{
set_user_cookie($profile['name'],$profile['id'],$profile['picture']['url'],$profile['email'],$profile['cover']['source']);
header('location: ../complete-profile.php');
}

}else{
$name = $profile['name'];
$id = $profile['id'];
$email = $profile['email'];
$result = $db->query("INSERT INTO `users`(`user_id`, `email`, `user_name`) VALUES ('$id','$email','$name')");
if($result){
set_user_cookie($name,$id,$profile['picture']['url'],$email,$profile['cover']['source']);
header('location: ../complete-profile.php');
}else{
echo 'Something Went Wrong';
}
}

// setcookie('user',$profile['name']."~".$profile['id']."~".$profile['picture']['url']."~".$profile['email'], time()+3600+2,"/");
// header('location: ../');
exit;
} else {
echo "Unauthorized access!!!";
exit;
}

這是設置COOKIE的功能

helper.php

// Set cookie
function set_user_cookie($name, $id, $pro, $email,$cover){
$string=$name."~".$id."~".$pro."~".$email."~".$cover;
setcookie('udet',$string, time()+3600*2*24,"/");
}

我正在使用Cookie存儲一些用戶數據,以在他們登錄文件時顯示該詳細信息。 這樣設置COOKIE時,我需要用戶可以訪問該頁面

complete-profile.php

require_once 'helper/helper.php';
if (isset($_COOKIE['udet'])) {
$user = explode("~",$_COOKIE['udet']);
$name =  $user[0];
$id = $user[1];
$pic = $user[2];
$email = $user[3];
$cover = $user[4];
}else{
header('Location : index.php');
}

然后我設置了一個登出鏈接,在那個登出文件中,我只是像這樣刪除cookie

logout.php

<?php
unset($_COOKIE['udet']);
header('Location: index.php')
?>

但是刪除后,我也可以訪問這些用戶數據,並且該Facebook帳戶未注銷!

我搜索了此答案,但在網絡上找不到任何合適的答案!

當用戶單擊注銷URL時,我需要注銷該用戶(注銷URL訪問logout.php)

請幫我

一年前左右,我試圖實現與您相同的目標。

但是,如果我沒記錯的話,這不是您可以控制的,只要用戶在Facebook上登錄,他就會在您的頁面上“登錄”。

您可以使它們進入登錄頁面,但是由於Facebook身份驗證已登錄到Facebook,因此仍可以識別它們。

我認為有一種方法可以完全注銷它們,但隨后它們也將從Facebook中注銷,我認為那不會使您流行。

編輯:我看了一下Facebook的JavaScript SDK中的注銷方法,我引用了

方法FB.logout()將用戶注銷到您的站點,有時甚至注銷Facebook。

https://developers.facebook.com/docs/reference/javascript/FB.logout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM