2

我正在用 PHP 开发一个小型 CMS,我们正在进行社交整合。

内容由有权发布新闻、事件等的单个管理员更改...

我想添加这个功能,当管理员发布它已经发布在 facebook 墙上的东西时。我对 facebook php SDK 不是很熟悉,对此我有点困惑。

如果(举个例子)10 个不同的网站正在使用我的 CMS,我是否必须创建 10 个不同的 facebook 应用程序?(假设这 10 个网站都在不同的域和服务器中)

第二,有没有办法只用 PHP 进行身份验证(比如直接发送用户名和密码),这样用户就不需要登录 Facebook?

谢谢

4

2 回答 2

3

您可能想将您的问题分解为更小的可理解单位。很难理解你在做什么。

我对您的问题的理解可能很少,但是这里...

1_ 不,您不会创建 10 个不同的 Facebook 应用程序。创建单个 facebook 应用程序并使其成为服务入口点。这样您的所有 cms 站点都可以与这个站点对话以与 facebook 进行交互。(一个 REST 服务层)。

2_ Facebook api 不支持用户名和密码认证。他们只支持oauth2.0。尽管 Oauth 并非微不足道,但由于他们为此提供了库,因此实现身份验证非常简单。

于 2011-03-14T20:20:51.423 回答
1

请阅读http://developers.facebook.com/docs/

它真的很容易和直接并且很好解释。

您的问题是如此模糊和广泛,以至于无法在这里很好地回答。

如果您遇到任何特定的实施问题,这是正确的地方。

但是,至少要回答您问题的一部分:

使用 facebook 应用程序时最强大的工具是 Graph API。

它的原理很简单。您可以代表任何用户或应用程序执行几乎任何操作。您必须首先生成一个标识用户和适当权限的令牌。这些令牌可以成为“永久性”,因此您可以执行后台任务。通常它们仅在很短的时间内处于活动状态,因此您可以在与用户交互时执行操作。生成令牌的过程涉及用户,因此他/她必须确认您要求的权限。

对于自动发布某些内容的网站,只要您在隐私设置中删除该应用程序,您可能会一次性生成一个永久令牌,该令牌处于活动状态。

基本上你可以在任何网站上使用任何应用程序。没有限制。但是,有两种生成令牌的方法。一个涉及附加请求,一个完成客户端,它绑定到您的应用程序设置中指定的一个域 oyu。

附录:

@ArtoAle

您对每个应用程序都只分配给一个域是正确的。但是,一旦您获得了一个有效的令牌,您在图形 api 中的何处或谁使用它都无关紧要。

让我稍微解释一下:

这是没有意义的,因为是你在做请求。没有“请求来自哪里”之类的东西。当然还有“referer”头信息,但可以自由指定,不用于任何上下文。

您在应用程序设置中输入的域仅限制 facebook 将用户重定向到的位置。

为什么?

这确保了一些坏人无法在任何域上建立网站,并让用户授权应用程序并使用您的应用程序获取访问令牌。

所以这个设置确保用户和访问令牌被重定向回您的站点,而不是另一个坏站点。

但还有一个选择。如果您将控制流用于桌面应用程序,则在用户被重定向回来后您不会立即获得访问令牌。你会得到一个临时的 SESSION-TOKEN,你可以用它来交换访问令牌。此交换是通过 REST api 在服务器端完成的,并且需要您的应用程序密码。因此,此时可以确保获得令牌的是您。

这种方法可以在任何域上完成,也可以在根本没有域上的桌面应用程序的情况下完成。

这是来自 faceboo 文档的引用:

要转换会话,请向 https://graph.facebook.com/oauth/exchange_sessions发送一个 POST 请求, 其中包含您要转换的会话的逗号分隔列表:

curl client_id=your_app_id \ -F client_secret=your_app_secret \ -F sessions=2.DbavCpzL6Yc_XGEI0Ip9GA__.3600.1271649600-12345,2.aBdC... \ https://graph.facebook.com/oauth/exchange_sessions 请求的响应是与给定会话顺序相同的 OAuth 访问令牌的 JSON 数组:

[ { "access_token": "...", "expires": 1271649600, }, ... ]

但是,您不需要这种方法,因为它有点复杂。对于您的用例,我建议使用中央授权点。

因此,您可以将您的 ONE 域指定为重定向 url。此域不是在您的网站之间共享。在那里,您可以获得完全有效的访问令牌并将用户无缝重定向回您的特定项目网站并传递访问令牌。

通过这种方式,您可以使用传统的简单身份验证流程,这可能也是未来的证明。

事实依然存在。生成访问令牌后,您可以从任何域执行任何操作,这没有区别,因为实际上没有请求来自的“域”(见上文)。

除此之外,如果您想要一些不错的 javascript 功能 - 例如评论框或喜欢按钮,您需要正确设置打开的图形标签

如果您有一些实施问题或如您所说的“域错误”,请更清楚地描述它们,包括您所做的步骤,并在可能的情况下提供错误消息。

于 2011-03-14T20:21:44.443 回答