Facebook身份验证流程

时间:2011-06-26 00:35:30

标签: ruby cookies facebook-graph-api sinatra

我目前正在使用Facebook Javascript API允许用户按如下方式登录我的应用:

 <html>
    <head>
      <title>My Facebook Login Page</title>
    </head>
    <body>
      <div id="fb-root"></div>
      <script src="http://connect.facebook.net/en_US/all.js"></script>
      <script>
         FB.init({ 
            appId:'YOUR_APP_ID', cookie:true, 
            status:true, xfbml:true 
         });
      </script>
      <fb:login-button>Login with Facebook</fb:login-button>
    </body>
 </html>

然后我使用ruby来检查生成的'fbs _...'cookie,从而验证用户身份。从这一点来说,我不确定我是否应该处理我自己的会话,我们使用创建的cookie来检查用户是否有效 - 当他们登录Facebook时,他们应该保持登录我的应用程序?如果没有,我怎么可能实现注销功能?

2 个答案:

答案 0 :(得分:0)

您可以使用API​​本身对用户进行身份验证

FB.getLoginStatus(function(response) {
  if (response.session) {
    // logged in and connected user, someone you know
  } else {
    // no user session available, someone you dont know
  }
});

api也提供注销

FB.logout(callback);

FB文档很差......但是无论如何看,它是获取最新修改的唯一途径。

答案 1 :(得分:0)

就个人而言,我会使用sinatra来管理用户数据,并使用Omniauth将Facebook视为身份验证提供商。

Ominauth或类似的解决方案允许用户保持登录应用程序,即使a)他们退出Facebook或b)FB cookie消失。用户还可以退出应用程序而无需退出Facebook。您还可以存储有关非Facebook用户的其他数据。以下是Sinatra with Omniauth的示例。在回调中,您将在成功验证后设置会话cookie。您还可以使用提供程序中的信息填充会话或用户模型,以便保留该信息。

另外,您还可以使用support more providers like OpenID,Google Apps甚至Twitter而不是Facebook。

编辑#1:更新以反映问题是关于sinatra并且无法使用设计