如何从facebook应用程序注销用户,但保持从facebook登录
我尝试过PHPSDK(v.3.1.1)和当前的Javascript SDK 正如这里所建议的: 现在,当尝试注销时,我已经尝试了FB.logout()(对于js) 和$facebook->getLogoutUrl() 正如这两种方法的文档中明确指出的,这些方法 将用户注销应用程序及其facebook会话 但我只需要将用户注销facebook应用程序(测试站点) 我尝试将用户从我的测试站点注销,忽略了facebook 方面。但在这种情况下,当用户再次单击登录按钮时, 登录流(facebook身份验证和重定向)不会发生 我也尝试过:(正如前面未解决的问题所建议的那样) 但是,当重定向到登录页面时,$facebook->getUser()仍然 检索用户 注: 根据文档示例,我正在使用php sdk将用户登录到我的测试站点, 和JSSDK,以呈现和简化facebook登录按钮 其他: 我使用的身份验证基本上是文档所建议的:如何从facebook应用程序注销用户,但保持从facebook登录,facebook,facebook-javascript-sdk,facebook-php-sdk,logout,Facebook,Facebook Javascript Sdk,Facebook Php Sdk,Logout,我尝试过PHPSDK(v.3.1.1)和当前的Javascript SDK 正如这里所建议的: 现在,当尝试注销时,我已经尝试了FB.logout()(对于js) 和$facebook->getLogoutUrl() 正如这两种方法的文档中明确指出的,这些方法 将用户注销应用程序及其facebook会话 但我只需要将用户注销facebook应用程序(测试站点) 我尝试将用户从我的测试站点注销,忽略了facebook 方面。但在这种情况下,当用户再次单击登录按钮时, 登录流(facebook身份验
<?php
define('YOUR_APP_ID', 'YOUR APP ID');
//uses the PHP SDK. Download from https://github.com/facebook/php-sdk
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => 'YOUR APP SECRET',
));
$userId = $facebook->getUser();
?>
<html>
<body>
<?php if ($userId) {
$userInfo = $facebook->api('/' + $userId); ?>
Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div id="fb-root"></div>
<fb:login-button></fb:login-button>
<?php } ?>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?= YOUR_APP_ID ?>',
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
</body>
</html>
欢迎
window.fbAsyninit=函数(){
FB.init({
appId:“”,
状态:正确,
曲奇:是的,
xfbml:是的,
真的,
});
FB.Event.subscribe('auth.login',函数(响应){
window.location.reload();
});
};
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
获取您的代码,并稍作修改:
<?php
define('YOUR_APP_ID', 'YOUR APP ID');
//uses the PHP SDK. Download from https://github.com/facebook/php-sdk
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => 'YOUR APP SECRET',
));
session_start();
$userId = $facebook->getUser();
if ($userId && !isset($_SESSION['fbdata'])) {
$_SESSION['fbdata'] = array("userid" => $userId);
}
?>
<html>
<body>
<?php if ($userId) {
$userInfo = $facebook->api('/' + $userId); ?>
Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div id="fb-root"></div>
<fb:login-button></fb:login-button>
<?php } ?>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '<?= YOUR_APP_ID ?>',
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
</body>
</html>
这将删除您为用户保存的所有数据,下次他访问您的页面时,您可以与他重新开始
我不是一名php程序员,我在这里使用的所有php都来自我(非常)有限的知识和我在周围找到的东西。如果用户通过了应用程序的身份验证并登录到facebook
getUser()
将始终返回FBID。删除cookie是可行的,但是sdk会通过调用getUser
获得一个新的访问令牌。问题是为什么要这样做?你(应用程序)和facebook用户都没有从中获得任何好处。简单地删除你为该用户提供的会话cookie怎么样?如果你只删除你的cookie,那么用户仍然会登录到facebook,但不会登录到你的应用程序。下次用户单击“登录”按钮时,您将为他创建一个新会话。@NitzanTomer我已尝试删除测试站点的会话,但正如我所说的,在这种情况下,js sdk的“登录”按钮不再按预期工作。@Rufinus,不确定您在这里想说什么“为什么要这样做?”。基本上,我只想让用户注销该网站,当用户注销时,facebook关联被消除。但是,如果用户决定再次登录,我希望整个登录过程都像以前没有登录一样。这是另一个问题,你能显示你的facebook验证代码吗?是的,我尝试过这种方法。但正如我在上一次回复你时所说的,我刚刚理解了为什么facebook sdk将用户完全从网站和facebook中注销。例如,一个用户弹出一个浏览器,使用fb登录进入该站点,他登录到该站点,在相同的操作中,他也登录到facebook。如果我只是想破坏该站点的会话,用户仍然会因为之前的操作而登录到facebook,但他/她可能不希望这样。我想要的是:1.)用户(未登录到fb或站点)通过fb登录登录到站点,注销,fb会话也会被破坏。2.)用户(登录到fb,而不是站点),通过fb登录登录到站点,注销站点,但fb会话保持不变。当然。Facebook为您提供了将用户从其平台注销的方法,但是否采用这种方法或仅从您的网站登录用户取决于您和您的应用程序。你问过如何让用户只从你的应用程序中登录,而不是从facebook中登录,这正是我想帮助你的。如果你不想做出选择,你可以有两种不同类型的按钮:“注销网站&fb”和“注销网站”,并让用户决定。据我所知,你无法知道用户是否已经登录facebook。你使用他们的身份验证机制,包括几个阶段,只有在用户(1)登录facebook(2)授权你的应用程序和(3)这是可选的-用户授予你你的权限(或部分权限)后,你才能重新集成到该过程中,我理解这一点,也许我甚至可以找到一种动态促进它的方法。但无论如何,我只是想知道是否有一种我一直错过的支持方法。
<?php
define('YOUR_APP_ID', 'YOUR APP ID');
//uses the PHP SDK. Download from https://github.com/facebook/php-sdk
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => 'YOUR APP SECRET',
));
session_start();
$userId = $facebook->getUser();
if ($userId && !isset($_SESSION['fbdata'])) {
$_SESSION['fbdata'] = array("userid" => $userId);
}
?>
<html>
<body>
<?php if ($userId) {
$userInfo = $facebook->api('/' + $userId); ?>
Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div id="fb-root"></div>
<fb:login-button></fb:login-button>
<?php } ?>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '<?= YOUR_APP_ID ?>',
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
</body>
</html>
session_start();
session_destroy();