我的项目使用Node.js和Express,但问题是关于通用方法。
我们的用户都来自FB,我们除了FB之外没有任何身份验证。我们需要将某些操作与特定的FB用户关联起来,并且还需要他们的令牌与FB进行通信。
目前我们这样做:
什么是好的:我们总是知道用户的状态是有效的(令牌的TTL超过正常页面的生命周期,所以我们在这里很好)。
我们不喜欢什么: *客户端令牌是短暂的(是的,我们可以交换它们,但如果我们能找到任何替代方案,我们不想这样做) *它通常需要多次向FB请求(1 - 加载JS SDK,2 - 获取登录状态),直到我们可以显示某些内容。直到我们网站的“登录”区块为空。
有什么问题?
我们正在寻找一种在这里使用某些服务器端代码的最佳方式,并且当我们确定用户已登录时,至少会呈现用户的名称和头像。
我可以想象一下这样的计划:
关注:
答案 0 :(得分:6)
使用JS SDK是以“实时”方式了解用户状态的唯一可行方法。 (引号中的“实时”,因为FB.getLoginStatus的结果也会被缓存 - 如果要求它始终准确,则必须使用第二个参数设置为true。)
如果您已经设置了JS SDK以在您的域下设置cookie,那么PHP SDK能够确定用户的登录状态而无需通过HTTP进行任何API查找 - 它只是从cookie中读取用户ID,因此Facebook :: getUser()将获取用户ID。这足以显示图片 - 但对于用户名,这仍然需要API请求。
在这里,您可以选择申请名称一次 - 然后将其保存到您的会话中。如果在下一个请求中,JS SDK指示用户不再连接,您可以从页面中删除登录信息和/或强制重新加载(并在此上清除会话),返回到不登录状态。
答案 1 :(得分:0)
实际上,说“为了实时,你需要使用JS SDK”是完全错误的! Facebook有“实时更新图谱API”,每次更新一些数据时,您的本地数据库会自动更新,然后您不需要使用JS SDK