【问题标题】:How to get the best performance from facebook canvas authentication如何从 facebook canvas 身份验证中获得最佳性能
【发布时间】:2010-10-15 06:54:17
【问题描述】:

画布登录需要执行以下操作的Facebook文档

  1. 包括 facebook 库
  2. 使用 App Id 和密钥实例化类
  3. 检查用户是否有有效的会话

    如果他们还检查您是否可以通过执行 api 调用 /me 来获取用户对象

    如果他们不处理登录重定向

所有这些,尤其是 Facebook 通话可能需要相当长的时间来处理

该示例以代码的形式显示了这一点 http://github.com/facebook/php-sdk/blob/master/examples/example.php

从我阅读的内容来看,似乎每一页都需要。因为用户可以在会话期间注销/删除应用程序/更改权限等

我的问题是在性能提升方面执行上述操作的理想方式是什么,但仍要确保它符合 facebook 的细微差别。

Facebook 确实给出了一个似乎是 GMT 的会话过期时间。

我使用 Zend 框架在 PHP 中编写代码,但我认为以上内容涉及所有语言。

感谢您对此的帮助

【问题讨论】:

    标签: php zend-framework facebook


    【解决方案1】:

    Ian,将您的用户 facebook 凭据存储在用户相关表(或其他)中

    facebook_user_id facebook_secret facebook_token

    让它看起来像这样:

    $user->facebook_session_array();
    

    然后,当您想重用它时,只需将其传递给您的 api 类。您无法使 oauth 过程(在身份验证时)更快,因为它必须实时进行。

    缓存您从 facebook 带回的任何内容和所有内容。在后台运行一些 crons 以将这些内容插入到表中或将其标记在驱动器上。您的 cron 脚本应该能够处理潜在的速率限制。我写了一些,但是facebook太慢了,我认为这毫无意义。

    Facebook 很慢。不要让您的应用以任何可以避免的方式等待它。

    【讨论】:

      【解决方案2】:

      首先,如果您想使用该用户的数据,您必须通过 facebook api 授权用户。作为成功认证的结果,您的应用程序将收到一个 access_token 和一个 expire_time。过期时间的值以秒表示,而不是 GMT 的时间戳。

      您的应用程序有权将 access_token 和 expire_time 存储在它自己的会话处理中,例如您需要 access_token 代表用户向 facebook api 发出请求。使用 expire_time 值(以及您授权用户的时间),您可以在调用 fb API 方法之前检查您的 access_token 的有效性......如果它过期,您应该重新验证。

      您绝对不需要在该用户的每次页面重新加载时重新进行身份验证。

      如果用户在 facebook 上更改某些内容(例如,删除您的应用程序),则对 api 的调用可能会失败并出现“OAuthException”错误。您的应用程序应该知道这些错误并适当地处理它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2015-09-01
        • 2018-12-23
        • 2011-06-27
        相关资源
        最近更新 更多