facebook - FB auth.logout 在使用 "server-side-workflow"(OAuth 2.0) 登录后被提升

标签 facebook authentication logout oauth-2.0

注意:在我们上周末升级到 Oauth 2.0 工作流之前,我们的(网络)应用程序运行良好。

当用户“通过 facebook 连接”到我们的(网络)应用程序时,我们使用 Facebook Authentication docs 中描述的“服务器端工作流程”将他们登录到 Facebook。 .但是,当用户访问我们应用程序中包含以下 javascript 代码的主页时,Facebook 会引发 auth.logout 事件:

window.fbAsyncInit = function() {
    FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true, channelUrl: 'http://XXX/fbchannel.html', oauth: true}); 
    FB.Event.subscribe('auth.logout', function(response) {
        logout();
    });
};
(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);
}());
function logout(){
    new Ajax.Request('http://XXX/logout');
}

看起来当用户登录到 Facebook 时,他们没有登录到我们的应用程序(如果您在浏览器的第二个选项卡中打开 facebook.com 并在通过我们的应用程序登录后重新加载页面,您会看到您确实已登录到 facebook.com)。

在使用“服务器端工作流”时,OAuth 2.0 中是否需要采取额外的步骤来让用户登录我们的应用程序,而这在之前的 OAuth 版本中不是必需的?用户是否必须在连接后通过 facebook 显式登录?

如有任何帮助,我们将不胜感激。

提前致谢, 杰森

PS- 通过客户端流程登录我们的应用程序(在您之前连接之后)工作正常。只有在通过服务器端工作流程连接和登录时,我们才会遇到自动注销问题。

最佳答案

对于 ajax 页面,您需要从浏览器 session 中获取 uid、access_token 和/或代码。

这是用于防止点击劫持和其他安全风险的 iframe 和 ajax 的标准。 查看:https://www.rfc-editor.org/rfc/rfc6749#section-10.13


简单粗暴的例子:

<?php
// be sure to exchange YourAppId, with your app id. 

if(isset([fb_YourAppId_user_id])){
$user = [fb_YourAppId_user_id];
}else { // no user, send to login flow. }

if(isset([fb_YourAppId_access_token])){
$access_token = [fb_YourAppId_access_token];
} else { // no user, send to login flow }

?>

关于facebook - FB auth.logout 在使用 "server-side-workflow"(OAuth 2.0) 登录后被提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7637297/

相关文章:

android - 意式 Espresso android facebook 登录

django - 单个 Django 应用程序的多个登录 URL

android - 使用新的 Activity 结果 API 登录 Facebook Sdk

facebook - Facebook 的开源替代品是什么?

Facebook API : "Share" a post already posted on a page's wall?

javascript - FB.api 不是函数

.net - 如何将 Servicestack 身份验证与 Active Directory/Windows 身份验证一起使用?

php - 登录信息页面未重定向

asp.net - 清除 ASP.NET 中的 session

ios - 通过 google plus 登录到 native 应用程序不会每次都显示登录页面?