#facebook #asp.net-core #facebook-graph-api #.net-core
#Facebook #asp.net-ядро #facebook-graph-api #.net-ядро
Вопрос:
Итак, facebook изменил способ получения веб-сайтами изображения профиля пользователя, все подробности здесь: https://developers.facebook.com/docs/graph-api/reference/user/picture /
Итак, я, а также SOF получаем изображение профиля пользователя из Facebook следующим образом: https://graph.facebook.com/1108834579148558/picture?type=large
Теперь мы получаем изображение по умолчанию, предоставляемое facebook.
В документах Facebook они пишут, что нам нужно прикрепить токен доступа, чтобы получить изображение профиля пользователя с этого момента, как это работает?
Единственное, о чем я могу думать, это то, что при входе пользователя в систему facebook может получить изображение профиля пользователя, кто-нибудь может помочь с этим, я использую.Сетевое ядро.
Ответ №1:
Facebook объясняет новый способ получения изображения пользователя после октября 2020 года в своих новых документах здесь, и они указывают необходимые изменения следующим образом:
Эта конечная точка поддерживает идентификаторы пользователей в приложении (ASID), идентификаторы пользователей (UID) и идентификаторы пользователей в области страниц (PSID). В настоящее время вы можете запрашивать идентификаторы ASID и UID без каких-либо требований. Однако, начиная с 24 октября 2020 года, для всех запросов на основе UID потребуется токен доступа. Если вы запрашиваете UID и, следовательно, должны включать токен:
1. Получите access_token
изображение в любой форме, которую вам предоставляет Facebook
В зависимости от структуры вашего приложения вы должны использовать один из следующих методов, предоставляемых Facebook, для получения access_token
. Вы можете найти больше access_token
о документах FB здесь.
Токен доступа к приложению токен доступа
к клиенту
В качестве примера для токена клиентского доступа, который я использую:
сделайте запрос GET https://graph.facebook.com/oauth/access_token
со следующими параметрами:
[
"client_id" => #FACEBOOK_CLIENT_ID,
"client_secret" => #FACEBOOK_CLIENT_SECRET,
"grant_type" => "client_credentials",
]
В качестве ответа вы получите свой access_token
, который вам нужно прикрепить к новому URL-адресу изображения.
2. Получите полный URL-адрес аватара с access_token
прикрепленным.
По состоянию на 23 октября 2020 года это работает для меня. Теперь полный формат изображения
{$this->graphUrl}/{$this->version}/{$userID}/picture?type=largeamp;redirect=falseamp;access_token={$access_token}
Если вы установите redirect=false
, вы получите объект JSON в качестве ответа:
{
"data": {
"height": 100,
"is_silhouette": false,
"url": "https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=10152700727498624amp;height=100amp;width=100amp;ext=1606081666amp;hash=AeTQyGgugiSbRcB7Sxw",
"width": 100
}
}
С другой стороны, если вы оставите redirect=true
или вообще не установите его, вы получите само изображение, которое затем сможете сохранить на своем диске или использовать URL в качестве пути к изображению. Но я не уверен, является ли данный URL-адрес долговечным или нет. Я получил тот же URL-адрес, который работает уже почти неделю, поэтому я думаю, что URL-адрес останется таким, как есть, как только вы запросили его с действительным access_token .
Пример запроса на PHP
Поскольку я реализовал это в PHP, я не могу привести вам пример кода, но покажу вам, как я это сделал с клиентом Guzzle в рамках Laravel. Вы можете ознакомиться с моим обновленным классом провайдера для Laravel Socialite здесь .
public function getAccessToken(){
// Make a request to get the Access Client
$res = Http::get("https://graph.facebook.com/oauth/access_token", [
"client_id" => config('services.facebook.client_id'),
"client_secret" => config('services.facebook.client_secret'),
"grant_type" => "client_credentials",
]);
// Response is a JSON Object, so decode it into an Array
$r = $res->json();
// Return the access_token Array Key out of the response
return Arr::get($r, 'access_token', false);
}
public function getFacebookAvatar(array $user){
// get the access_token from the above method
$access_token = $this->getAccessToken();
// build the new URI path for the User Image
$path = "{$this->graphUrl}/{$this->version}/{$userID}/picture?type=largeamp;redirect=falseamp;access_token={$access_token}";
$res = Http::get($path);
// Get the final User Image URL out of the response
return Arr::get($res->json(), 'data.url', false);
}
Быстрый и грязный способ создания собственного токена доступа (не рекомендуется)
Есть один способ создать свой собственный access_token
, но его следует использовать только для целей тестирования, поскольку вы предоставляете свои полные учетные данные, и это может быть взломано. Вы можете архивировать это, создав объединенную строку с вашими учетными данными и разделителем |
as в этом формате : {cliend_id}|{client_secret}
.
Комментарии:
1. Привет, @Gkiokan спасибо за вашу помощь! Что касается токена доступа. Должно ли приложение быть «живым» или «проверенным», чтобы использовать токен доступа?
2. @Alex Если вы являетесь владельцем приложения, это не имеет значения. Но приложение должно быть в режиме реального времени, когда другие пользователи пытаются получить доступ к api через ваше приложение. Некоторые из них общедоступны, а другие привязаны к сети. Например, вход в систему fb для других пользователей, которые не входят в команду разработчиков, не может использовать его, пока приложение не получит статус live. Проверенное состояние не имеет ничего общего с api.
3. @Gkiokan последний метод может использовать токен клиента вместо секрета клиента здесь есть небольшой пример developers.facebook.com/docs/facebook-login/access-tokens/… Но я не смог найти более подробной информации, но он работает с этим токеном вместо использования секрета
4. @FelipeBarreto Вы можете найти информацию в разделе
Generating an App Access Token
. Но даже там FB заявляет, что вы не должны использовать этот метод по соображениям безопасности. Но для быстрых и грязных тестовых запросов в среде разработки его можно использовать. Найдите это на странице документов:curl -i -X GET "https://graph.facebook.com/{api-endpoint}amp;access_token={your-app_id}|{your-app_secret}"
или здесь developers.facebook.com/docs/facebook-login/access-tokens /…