FB身份验证的正确方法
我的项目使用Node.js和Express,但问题在于通用方法。
我们的用户全部来自FB,除FB外,我们没有其他任何身份验证。我们需要将某些操作与特定的FB用户相关联,还需要他们的令牌才能与FB通信。
我们这样做:
- 用户来到页面
- 有一些 看不见的 块:一个带有占位符,用于存储用户的化身和姓名(“已登录”),另一个带有用于触发FB登录的按钮(“已退出”)
- 使用FB JS SDK,我们检查用户的登录状态。如果已 (实际上意味着:登录FB,验证了我们的应用程序并提供了我们需要的所有权限),我们将获得用户名和FB ID并显示“已登录”块。否则,显示“已注销”框
- 对于登录用户的某些操作,用户的access_token通过AJAX传递到服务器(不用担心,这里是HTTPS),并由服务器代码用于执行操作,如发布到用户墙或其他操作
- FB登录按钮由JS处理,并调用FB.login()
- 在JS authResponseChanged事件上,采取了明显的措施(显示/隐藏已登录/退出的块)
:我们始终知道用户的状态有效(令牌的TTL超过正常页面的生存期,因此在这里很好)。
:客户端令牌是短暂的(是的,我们可以交换它们,但是我们不想找到其他替代方案)通常需要向FB发出多个请求(1-加载JS
SDK,2-获取登录状态),直到我们可以显示一些内容为止。直到我们网站的“登录”块为空。
我们正在寻找一种最佳的方式来使用一些服务器端代码,并在确定用户已登录时至少呈现用户的名称和头像。
我可以想象这样的方案:
- 使用服务器端身份验证(带有重定向)获取长期有效的令牌并将其持久保存在服务器上
- 在会话中保存用户状态(登录/注销,FB ID,名称)
- 如果会话在服务器上处理模板时具有登录状态,呈现名称和头像
:
- 如果用户从FB登录了我们的帐户或撤消了App的权限,我们怎么知道它以及我们应该何时对其进行检查(检查每N个请求?每X小时检查一次?仅在令牌在Y小时内到期时检查?)
- 如果我们还是在渲染任何模板之前从服务器检查用户的状态(在官方示例中就是这种情况),这会使速度变慢,对吧?因为我认为在繁忙时间FB API调用可能会比较慢。
回答:
使用JS SDK是“实时”了解用户状态的唯一可行方法。(用引号引起来的“实时”,因为FB.getLoginStatus的结果也将被缓存-
如果一个人希望它始终是准确的,则必须使用第二个参数设置为true。)
如果您设置了JS SDK来在您的域下设置cookie,那么PHP SDK可以确定用户的登录状态,而无需通过HTTP进行任何API查找-
它仅从cookie中读取用户ID,因此Facebook :: getUser ()将获得您的用户ID。这足以显示图片-但对于用户名,仍然需要API请求。
在这里,您可以选择 一次 请求名称,然后将其保存到会话中。如果在下一个请求中JS
SDK指示用户不再连接,则可以从页面上删除登录信息和/或强制重新加载(然后清除会话),以返回到登录状态。
以上是 FB身份验证的正确方法 的全部内容, 来源链接: utcz.com/qa/435577.html