我集成了图形api facebook connect但是如果我们登录到facebook,我们将自动登录到facebook连接的网站。我们是否有任何方式让用户点击fb“登录”,然后用户才能通过他们的fb帐户连接到该网站?
现在,用户自动登录该网站,无需选择是否要使用自己的Facebook帐户。如果他们想要从网站注销,他们需要完全从Facebook注销,然后他们才可以从Facebook连接的网站注销。
任何人都可以帮助我或提供一些如何去做的提示? 谢谢!
答案 0 :(得分:3)
我在最近的网站上遇到了同样的问题,并找到了克服它的方法。我的解决方案允许用户已经在他们的计算机上登录到facebook,但没有在我的网站上自动登录,然后他们可以使用Facebook登录按钮登录,最后当他们退出时,它们不会将他们从Facebook登录到他们的计算机上,就在我的网站上(就像Digg和facebook一样)。
要做到这一点,我使用https://github.com/facebook/php-sdk/在PHP中检查是否存在与用户和网站的活动facebook会话(这将导致自动登录)。如果有,我不会回应自动登录代码:
FB.init({ appId : '<?php echo $facebook->getAppId(); ?>', session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML }); FB.Event.subscribe('auth.login', function() { window.location = "process-login.php"; });
但只是渲染我自己的facebook登录按钮,链接到“process-login.php”。
process-login.php会设置自定义$ _SESSION变量,该变量告诉我的网站有人被记录(无论是通过我自己的系统,还是通过facebook),然后重新加载引用页面(使用$ _SERVER ['HTTP_REFERER'])由于我自己的$ _SESSION变量现已设置,现在将显示用户通过Facebook登录。要记录它们(没有完全将它们从Facebook中删除,只记录我的网站),我只需加载一个删除$ _SESSION变量的注销脚本。
example.php(在github上的php-sdk中)非常有助于找到我的解决方案,尽管我必须对其进行大量定制以使其适用于我现有的系统。它至少帮助我了解如何在PHP中访问facebook会话变量(在示例中存储在$ me中)。
希望这可以帮助你,如果它仍然是一个问题,或在这种情况下它帮助其他人。
编辑: 结果我在极少数情况下仍然遇到了一些自动登录问题。为了解决这个问题,我删除了event.subscribe('auth.login'),并在订阅auth.login之前创建了一个调用以下函数的facebook按钮来检查登录状态。这是功能:
function check_login_session(){ FB.getLoginStatus(function(r){ if(r.session){ window.location = '/process-login.php'; } else{ FB.Event.subscribe('auth.login', function(response) { window.location = '/process-login.php'; }); FB.login(); } }); }`
答案 1 :(得分:1)
我遇到了同样的问题,我猜你正在使用facebook提供的脚本。在这种情况下,您有一个与window.fbAsyncInit事件关联的函数。每次加载页面时都会发生这种情况。 在这个方法的最后你有代码:
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
函数statusChangeCallback验证用户的Facebook状态(已连接,已授权或未知)。在这里,如果用户“已连接”,则将其登录到您的站点。那就是问题所在,你总是试图用Facebook登录用户。
这必须仅在点击时发生,因此您应该删除这些行
答案 2 :(得分:0)
<fb:login-button perms='email' autologoutlink='true'>
当用户允许您的Facebook帐户与您的网站连接时
<div id="fb-root"> <script> window.fbAsyncInit = function() { FB.init({appId: "Your APP ID", status: true, cookie: true, xfbml: true}); FB.getLoginStatus(function(response) { if (response.session) { // Send here parameters that logins to your system through your website login system } else { } }); FB.Event.subscribe("auth.login", function(response) { window.location.reload(); }); FB.Event.subscribe("auth.logout", function(response) { window.location.reload(); //Send the Parameters that logouts user from your website through your website logout system; }); }; (function() { var e = document.createElement("script"); e.type = "text/javascript"; e.src = document.location.protocol + "//connect.facebook.net/en_US/all.js"; e.async = true; document.getElementById("fb-root").appendChild(e); }());
并将上述整个代码放在&lt; body&gt;之后标签
答案 3 :(得分:0)
如果你有:
FB.Event.subscribe('auth.login', function() {
fbLogin(this);
});
尝试评论/ * fb.Event ..... * /