2

我有一个 php 应用程序,我的注册用户在其中登录到 facebook。我用$facebook->getLogoutUrl();. 然后我检索他们所有的专辑并在 HTML 选择标签中显示他们的 ID 和名称。用户选择一个,专辑的 id 存储在数据库中。

在这里一切都很好。

然后一个匿名用户访问我的网站,我希望他看到我的注册用户照片(注册用户选择的相册的公共照片)(他们没有登录我的网站,他们没有登录 facebook)。目前,它仅在匿名用户登录 facebook 时才有效。但是即使匿名者没有登录facebook,我也想显示照片。

$photos = $facebook->api('/'.$idAlbum.'?fields=id,name,link,photos.fields(id,picture,source)');

我已经尝试了 2 周,但似乎没有任何效果。我尝试过不登录,我尝试过使用应用访问令牌,我尝试过:

https://graph.facebook.com/oauth/access_token?client_id=XXXXXX&client_secret=YYYYYY&grant_type=client_credentials

谁能帮我?或者告诉我我的应用程序是否无法从相册中检索照片。我搜索了一种登录我的应用程序的方法,但我只找到了应用程序访问令牌(https://developers.facebook.com/docs/howtos/login/login-as-app/)但正如它所说it can make requests as the app, not as a user

4

1 回答 1

1

为了访问用户信息,您需要该用户的有效访问令牌。应用程序访问令牌不能用于代表用户执行任何操作。

访问令牌会在一段时间后过期,这会阻止应用程序在用户实际未使用应用程序时搜索用户信息。

如果您想一路走下去 - 只需从相册中下载所有照片并将它们存储在您的服务器上......如果您不能这样做,那么您将不得不考虑扩展相册所有者的访问令牌,以便您可以在查询他们的相册时使用它。就应用程序而言,使用该扩展访问令牌,实际上是相册所有者发出请求。

取自Facebook 文档

扩展客户端用户访问令牌

当一个人完成客户端身份验证流程并且您检索他们的用户访问令牌时,默认情况下,该令牌仅在一到两个小时内有效。

您可以将此令牌交换为有效期最长为 60 天的令牌,方法是使用 fb_exchange_token 的 grant_type 参数将其从您的服务器传递到 /oauth 端点。[请注意,它必须从服务器发送,以免 App Secret 暴露。] 如下所示:

https://graph.facebook.com/oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id=APP_ID&
    client_secret=APP_SECRET&
    fb_exchange_token=SHORT_LIVED_ACCESS_TOKEN

来自此端点的响应将包括长期访问令牌。这将是与原始令牌不同的字符串,因此如果您要存储这些令牌,请替换旧的。

基本上,只要任何(注册的)用户成功登录并将令牌存储在数据库中,您就必须这样做。

于 2013-04-24T21:53:31.673 回答