【问题标题】:Get an access token without being connected to facebook在不连接到 Facebook 的情况下获取访问令牌
【发布时间】:2015-07-09 17:55:01
【问题描述】:

我需要使用他们的 javascript SDK 检索 Facebook 页面的帖子列表(提要),就像他们在文档中解释的那样:https://developers.facebook.com/docs/graph-api/reference/v2.4/page/feed

/* make the API call */
FB.api(
    "/{page-id}/posts",
    function (response) {
      if (response && !response.error) {
        /* handle the result */
      }
    }
);

我需要它作为我网站的“新闻部分”,因此即使没有连接到 facebook,用户也应该看到它。

问题

酷,但有一个问题......它返回:An access token is required to request this resource. 天哪...我想为您获取一些访问令牌@facebook,但我的应用程序没有使用您的身份验证工具/插件。 无论如何,我尝试使用FB.getLoginStatus(); 但不起作用,因为它可以返回access_token 的唯一方法是用户是否实际连接到应用程序。 我的用户甚至可能没有登录到 facebook

那么,¿如何将 access_token 存储到变量中,然后用于获取/{my-page}/posts

我已经看过这个SO question,但它并没有解决我的问题,仅仅是因为没有这样的“通用令牌”。 我也读过https://developers.facebook.com/docs/facebook-login/access-tokens/,这也依赖于通过facebook登录方法生成的令牌......所以,我不能在我的网站上显示fb页面的帖子列表,而无需连接到facebook,因此是一个应用程序?

添加:我的应用是用 angularJS 构建的,我不处理服务器端代码。我将完全依赖 javascript 方法。

【问题讨论】:

  • 看来您必须在 facebook 中进行身份验证才能使用 facebook
  • 嘿,你找到办法了吗?我仍在试图弄清楚如何获得该页面访问令牌并通过 PHP 调用 api...

标签: javascript facebook facebook-graph-api facebook-javascript-sdk facebook-access-token


【解决方案1】:

您可以使用页面或应用访问令牌,但由于您将在客户端使用它们,因此两者都不是一个选项。

请注意,由于此请求使用您的应用程序密钥,因此不得在客户端代码或可反编译的应用程序二进制文件中发出该请求。重要的是,您的应用程序机密永远不会与任何人共享。因此,此 API 调用只能使用服务器端代码进行。

我强烈建议构建一个简单的服务器端脚本(例如 PHP)来将请求代理到 Graph API。然后,您可以通过 AJAX 调用它并异步加载帖子(并且还可以摆脱 FB JS SDK!)。如果您不想为所有用户使用 FB 登录(恕我直言,这也没有多大意义),则没有方法可以安全地处理此问题。

【讨论】:

  • 好的,让我回顾一下:D 你建议我构建自己的 API,使用 PHP(例如)和 facebook PHP SDK 来定位 facebook API 的 /{my-page}/posts 端点,然后我从我的客户端调用我自己的api,就像/api/pageFeed一样,如果我登录到facebook,我应该返回相同的对象,我通常调用/{my-page}/posts,带有访问令牌? (对不起,这个问题很长:D)
  • 或多或少是一个准确的回顾 :-) 如果您更熟悉 JS,您还可以编写一个 20 行的 Node.js 脚本。您可以创建一个永久页面访问令牌,调用 Graph API 时无需刷新
  • 让我和后端工作人员谈谈,我稍后会回来找你;)顺便说一句,你有什么建议:我的 API 只返回生成的令牌,其余的在 JS 中完成, 还是接近服务器端脚本以从/{page}/posts 返回完整的 json 对象?
  • 我推荐后者。
【解决方案2】:

我认为这很简单:)
由于页面的帖子始终是public,因此它只需要一个有效 访问令牌即可检索页面帖子。 引用你写的:

那么,¿如何将 access_token 存储到变量中,然后用于获取 /{my-page}/posts?

您只需要一个访问令牌。
我的建议是;
- 为自己生成访问令牌(无需额外权限) - 请求 page-id/posts

这样您就不需要其他用户连接到 facebook,您可以简单地请求 page-id/posts 来检索带有您为自己生成的访问令牌的帖子。

希望它能解决你的问题 :D
提示:只要帖子是公开,您只需要一个有效的访问令牌,它不需要是特定于用户或页面的。

【讨论】:

  • 这应该只对服务器端应用程序执行 - 公开一个不适合当前在客户端代码中查看/使用应用程序的用户的访问令牌将是一个非常糟糕的主意,因为每个人可以从那里偷走它。
  • 而且页面帖子并非“始终公开”——页面本身可能受到限制(年龄、位置、与酒精相关的内容),或者帖子可能仅“针对”特定受众。跨度>
  • @CBore 如果访问令牌没有额外的权限,我认为是OK。第二种情况仅适用于您连接到 facebook,我猜,并且需要页面访问令牌 afaik。
  • 不过,不应该这样做。 (并且可以使用页面访问令牌,来自满足要求的用户的用户访问令牌来请求可见性有限的页面帖子。)
猜你喜欢
  • 2022-11-24
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2013-10-18
  • 2016-07-02
相关资源
最近更新 更多