В настоящее время я разрабатываю приложение, которое должно отображать изображение профиля пользователя.Мое приложение использует "Page Scope Id", поэтому все вызовы API возвращают идентификатор пользователя в качестве идентификатора области страницы.Поэтому нельзя использовать / {user-id} / picture без access_token.
Есть один способ сделать это вернуть page_access_token с сервера на клиент,затем отобразите изображение как: <img src="//graph.facebook.com/{user-id}/picture?access_token=xxxxx" />.
Но это небезопасно, потому что оно отображает page_token в DOM.Поэтому я хочу получить эту картинку через мой сервер.Пример:
- есть API для получения изображения пользователя Facebook, например:
//my-server.com/api/{user-id}/picture
- Изображение клиента на
<img src="//my-server.com/api/{user-id}/picture" />
- 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, чтобы получить изображение профиля:
- Пользователь A, имеет токен сервера token1, звонит в API:
- Звонит
myserver.com/api/{user-id}/picture
- Сервер проверит, чтобы токен был отправлен с cookie, чтобы получить пользователя на сервере, а затем получить facebook_page_token этого пользователя
- Серверный вызов Facebook API с facebook_page_token для получения изображения,
- Сервер кэширует это изображение
- Пользователь B, есть токен сервера token2, вызовите тот же API:
- Вызов
myserver.com/api/{user-id}/picture
- ... если мы используем кеш, этозначит, нам не нужно проверять токен для этого пользователя.
- Проверьте кеш, если он есть в кеше, то верните кеш, в противном случае вернитесь к шагу 1.Я думаю, что это будет работать правильно, но что, если пользователь B не имеет разрешения на странице, это означает, что пользователь B не имеет разрешения на чтение этого API.
Может кто-нибудь помочь мнерешить эту проблему, обратите внимание, что я не хочу показывать page_access_token клиенту.
Большое спасибо!