从服务器调用Facebook API / {user-id} / picture?access_token = xxxxxx的最佳方法?

时间:2019-04-23 02:24:25

标签: facebook-graph-api caching

我目前正在开发一个需要显示用户个人资料图片的应用。我的应用使用“页面范围ID”,因此所有API调用都将用户ID作为页面范围ID返回。因此,没有access_token的用户不能使用/ {user-id} / picture。

enter image description here

有一种方法是将page_access_token从服务器返回到客户端,然后将图像显示为:<img src="//graph.facebook.com/{user-id}/picture?access_token=xxxxx" />.但这并不安全,因为它在DOM中呈现page_token。所以我想通过服务器获取这张照片。示例:

  1. 有一个用于获取Facebook用户图片的API,例如://my-server.com/api/{user-id}/picture
  2. <img src="//my-server.com/api/{user-id}/picture" />的客户端显示图片
  3. API "//my-server.com/api/{user-id}/picture"将基于呼叫者用户获得access_token。然后发送并请求Facebook API /{user-id}/picture?access_token=xxxxxx来获取图片,然后将其返回给客户端。

这是绝对可能的,但是有一些我无法解决的问题:

每次客户端调用服务器获取图片时,服务器都需要检查会话以获取用户的facebook_token,然后调用facebook API。因此,如果我有100次对服务器的API调用,则服务器需要检查100次。非常糟糕。

在某些情况下,在服务器端缓存映像可能无济于事。想象有两个用户调用API来获取个人资料图片:

  1. 用户A,具有服务器令牌token1,调用API:
    • 致电myserver.com/api/{user-id}/picture
    • 服务器将检查令牌与cookie一起发送,以使用户进入服务器,然后获取该用户的facebook_page_token
    • 服务器使用facebook_page_token调用Facebook API以获取图像,
    • 服务器缓存此图像
  2. 用户B,具有服务器令牌token2,调用相同的API:
    • 致电myserver.com/api/{user-id}/picture
    • ...如果我们使用缓存,则意味着我们不需要为此用户检查令牌。
    • 检查缓存,如果有缓存,则返回缓存,否则返回1的步骤。 我认为这可以正常工作,但是如果用户B没有页面权限,那意味着用户B没有读取该API的权限。

任何人都可以帮助我解决此问题,请注意,我不想向客户端显示page_access_token。

非常感谢您!

0 个答案:

没有答案