一个适当的方法来validation

我的项目使用Node.js和Express,但问题是关于通用的方法。

我们的用户都来自FB,除了FB,我们没有任何身份validation。 我们需要将某些操作与特定的FB用户相关联,还需要他们的标记与FB进行通信。

目前我们这样做:

  • 用户来到页面
  • 不可见的块:一个带有占位符,用于用户的头像和名字('login'),另一个带有触发FBlogin('注销')的button。
  • 使用FB JS SDK我们检查用户的login状态。 如果连接 (实际上是指:login到FB,authentication我们的应用程序,并提供我们需要的所有权限),我们得到用户名和FB ID,并显示“login”块。 否则显示“注销”的块
  • 对于某些操作的login用户,用户的access_token通过AJAX传递给服务器(不用担心,HTTPS在这里),服务器代码用于发布到用户墙上等操作
  • FBloginbutton由JS处理并调用FB.login()
  • 对JS authResponseChanged事件采取明显的行动(显示/隐藏login/退出块)

什么是好的 :我们总是知道用户的状态是有效的(标记的TTL比普通页面的生命周期要长,所以我们在这里很好)。

我们不太喜欢 :*客户端令牌是短暂的(是的,我们可以交换它们,但是如果我们能find其他的方法则不想)*它通常需要几个请求到FB(1-load JS SDK,2 – 获取login状态),直到我们可以显示一些东西。 直到我们网站的“login”块为空。

问题是什么?

我们正在寻找一个最佳的方式来使用一些服务器端的代码,至less在我们确定用户login时提供用户名和头像。

我可以想像这样的一些计划:

  • 使用服务器端身份validation(带redirect)来获取长寿命令牌并将其保存在服务器上
  • 在会话中保存用户状态(login/注销,FB ID,名称)
  • 如果会话具有login状态,则在服务器上处理模板时呈现名称和头像

顾虑

  • 如果用户从FBlogin我们的应用程序或撤销应用程序的权限,我们应该如何知道它,我们应该什么时候检查它(每隔X小时检查每N个请求?只有在令牌将在Y小时内过期时才检查)。
  • 如果我们在渲染任何模板(在官方的例子中就是这种情况)之前,从服务器检查用户的状态,这会减慢速度,对吧? 因为我认为在炎热的时候FB API调用可能相当慢。

使用JS SDK是“实时”了解用户状态的唯一可行的方法。 (“引用”中的“实时”,因为FB.getLoginStatus的结果也被caching – 如果有人希望它始终是准确的,则必须使用第二个参数设置为true)。

如果您已经将JS SDK设置为在您的域下设置cookie,那么PHP SDK能够在不通过HTTP进行任何API查找的情况下确定用户的login状态 – 它只是从cookie中读取用户ID,所以Facebook :: getUser ()会得到你的用户ID。 这将足以显示图片 – 但对于用户名,这仍然需要一个API请求。

在这里,您可以select请求一次名称 – 然后将其保存到会话中。 如果在下一个请求中,JS SDK指示用户没有再连接,则可以从页面中删除login信息和/或强制重新加载(并清除会话),以返回不login状态。

其实说“为了实时,你需要使用JS SDK”是完全错误的! Facebook有“实时更新graphicsAPI”,每次有一些数据更新,你的本地数据库自动更新,那么你不需要使用JS SDK