Ruby Facebook身份验证过程

Ruby Facebook身份验证过程,ruby,cookies,facebook-graph-api,sinatra,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 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时继续登录我的应用程序?如果没有,如何实现注销功能?

您可以使用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医生很差。。。但无论如何,请阅读,这是在他们的sdk上获得最新更改的唯一方法。

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

或者类似的解决方案允许用户保持登录应用程序,即使他们从Facebook注销或FB cookie消失。用户也可以在不注销Facebook的情况下注销应用程序。您还可以存储非Facebook用户的其他数据。下面是一个例子。在回调中,您将在成功的身份验证后设置会话cookie。您还可以使用提供者提供的信息填充会话或用户模型,以便保留该信息

此外,你还可以使用OpenID、谷歌应用程序甚至Twitter而不是Facebook


编辑1:更新以反映问题是关于sinatra的,并且无法使用此策略的deviseSo,一旦用户通过身份验证,他们在你的应用程序上的会话与Facebook上发生的事情无关?此外,这是sinatra应用程序,所以我认为我不能使用devise?对两条评论都正确,一旦他们通过身份验证,他们的会议是独立的。您仍然可以使用OmniAuth与Sinatra进行身份验证,而无需设计,只需在回调URL上生成一个会话,并将所有内容保留在会话中,或将附加到会话的用户信息存储在数据库中。我用Sinatra信息更新了我的答案。