Лучший способ позвонить в Facebook API / {user-id} / picture? Access_token = xxxxxx с сервера? - PullRequest
0 голосов
/ 23 апреля 2019

В настоящее время я разрабатываю приложение, которое должно отображать изображение профиля пользователя.Мое приложение использует "Page Scope Id", поэтому все вызовы API возвращают идентификатор пользователя в качестве идентификатора области страницы.Поэтому нельзя использовать / {user-id} / picture без access_token.

enter image description here

Есть один способ сделать это вернуть page_access_token с сервера на клиент,затем отобразите изображение как: <img src="//graph.facebook.com/{user-id}/picture?access_token=xxxxx" />. Но это небезопасно, потому что оно отображает page_token в DOM.Поэтому я хочу получить эту картинку через мой сервер.Пример:

  1. есть API для получения изображения пользователя Facebook, например: //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 основывается на вызывающем пользователе.Затем отправьте и запросите API Facebook /{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 API с facebook_page_token для получения изображения,
    • Сервер кэширует это изображение
  2. Пользователь B, есть токен сервера token2, вызовите тот же API:
    • Вызов myserver.com/api/{user-id}/picture
    • ... если мы используем кеш, этозначит, нам не нужно проверять токен для этого пользователя.
    • Проверьте кеш, если он есть в кеше, то верните кеш, в противном случае вернитесь к шагу 1.Я думаю, что это будет работать правильно, но что, если пользователь B не имеет разрешения на странице, это означает, что пользователь B не имеет разрешения на чтение этого API.

Может кто-нибудь помочь мнерешить эту проблему, обратите внимание, что я не хочу показывать page_access_token клиенту.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...