Помилка API Facebook 191


76

Я намагаюся інтегрувати свій проект із Facebook. Спочатку я роблю дитячі кроки і просто намагаюся увійти в систему, отримати сеанс Facebook та отримати деякі дані користувача. Я розробляю його локально, тому мої налаштування програми Facebook такі:

site URL: http://127.0.0.1:8888/mySite/

URL-адреса полотна така ж, як і вище. Я не вказав домен сайту.

Однак, коли я натискаю кнопку входу, я отримую повідомлення про помилку:

API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: redirect_uri is not owned by the application.

На даний момент я не написав жодного коду на стороні сервера для роботи з переадресаціями тощо. Все, що я зробив, це додати JavaScript SDK на основі підручника у Facebook для веб-сайтів .

Що я зробив неправильно? Очевидно, це щось пов’язане з налаштуваннями мого додатка на Facebook, але я не бачу, що!


Для читачів: зверніть увагу, що це запитання та прийнята відповідь стосуються як локального сервера та розробки / тестування, так і реальних серверів та URL-адрес!
Стефано,

Відповіді:


88

UPDATE:
Для того, щоб відповісти на API Error Code: 191 повинен дорівнювати (або відносна) до URL сайту.
redirect_uri
введіть тут опис зображення

Порада. Використовуйте базові URL-адреси замість повних URL-адрес, що вказують на конкретні сторінки.

Не рекомендується: Наприклад, якщо ви використовуєте в www.mydomain.com/fb/test.htmlякості URL сайту і має , www.mydomain.com/fb/secondPage.htmlяк redirect_uriце дасть вам помилку 191.

РЕКОМЕНДОВАНО: Отже, замість цього URL-адресу вашого сайту потрібно встановити на базову URL-адресу, наприклад: www.mydomain.com/АБО www.mydomain.com/fb/.


Я пройшов через Facebook приклад програми Python сьогодні, і я був в шоці було ясно про те , що ви можете використовувати в http://localhost:8080/якості URL сайту , якщо ви розробляєте на місцевому рівні:

Налаштуйте URL-адресу сайту та вкажіть його на свій веб-сервер. Якщо ви розробляєте локально, ви можете використовувати http: // localhost: 8080 /

Хоча я був впевнений, що ти не можеш цього зробити, виходячи з мого власного досвіду (дуже старий тест), здається, ти насправді МОЖЕШ тестувати свою програму Facebook локально!

Тож я взяв стару програму та відредагував її назву, URL-адресу сайту та URL-адресу полотна: URL-адресу сайту: http://localhost:80/fblocal/

Я завантажив останню версію PHP-SDK для Facebook і кинув її у свою xampp/htdocs/fblocal/папку.

Але я отримав ту ж помилку, що і ваша! Я помітив, що XAMPP робить автоматичне перенаправлення на, http://localhost/fblocal/тому я змінив налаштування на просто, http://localhost/fblocal/і помилка зникла, АЛЕ мені довелося видалити програму (з налаштувань конфіденційності ) та перевстановити свою програму, і ось результати:
текст заміщення

Після цього попросив publish_streamдозволу, і я зміг опублікувати у своєму профілі (за допомогою PHP-SDK):

$user = $facebook->getUser();
if ($user) {
    try {
        $post = $facebook->api('/me/feed', 'post', array('message'=>'Hello World, from localhost!'));
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
}

Результати: текст заміщення


1
Гм, отже, я зараз розгублений. Що про це відповіді: stackoverflow.com/questions/4633846/facebook-app-development
musoNic80

1
Я ДУМАЮ, що він мав на увазі те, що ви можете протестувати свою програму локально, але будь-яка взаємодія з facebook вимагатиме публікації вашого веб-сайту / домену. наприклад, якщо у вас є флеш-гра, ви можете протестувати її локально, перш ніж пройти її на полотні FB. Що стосується коду після цього, він пояснює, як ви можете захистити свій веб-сайт у реальному часі від доступу, поки розробка не закінчиться, і ви не будете готові до запуску.
ifaour

2
Все йде нормально! Я дійшов до діалогового вікна входу та запиту дозволів! Я ще не мав можливості протестувати отримання деяких фактичних даних, але з нетерпінням чекаю, коли відповідь приймуть, коли я це прийму! Вуху!
musoNic80,

як ви перевстановили програму? Я перебуваю в режимі Sandbx і отримую ту саму помилку 191, якщо я не отримую доступ до мого redirect_url безпосередньо у браузері, який потім показує мені діалог авторизації
Volatil3,

@ Volatil3, я щойно видалив його зі свого списку програм у налаштуваннях конфіденційності.
ifaour

11

Для мене це був відсутній домен програми. Зайдіть у програму та переконайтеся, що корінь вашого сайту налаштовано як домен програми. Дивіться знімок екрана.

Домени додатків знаходяться в основних налаштуваннях вашого додатка


Ця відповідь не пов’язана з запитанням, оскільки оригінальний плакат розробляється локально, а поле Домени додатків не дозволяє ні localhost, ні 127.0.0.1: flic.kr/p/kHqiny
Вінс,

4
Питання учасника запитання вже вирішено. Ця відповідь має бути корисною людям із подібною проблемою, які вважають, що це питання допоможе їм на основі великого жирного заголовка. Тепер це може.
Mike_K

8

Це лише через помилку URL-адреси.

Незалежно від вказаної URL-адреси веб-сайту має бути правильно.

Я згадав URL-адресу веб-сайту як http://localhost:3000/ і домен як localhost, але у своєму браузері я працював http://0.0.0.0:3000/.

Коли я запустив сервер, оскільки localhost:3000він вирішив проблему.

Як я вже згадував, URL-адреса сайту як localhost Facebook переспрямовуватиме на ту саму, якщо ми працюємо 0.0.0.0:3000, з’явиться помилка, що «Дана URL-адреса не дозволена конфігурацією програми».


2

Я також стикався з тією ж проблемою, коли використовую метод автентифікації facebook. Але я виправляю цю проблему наступними змінами у Facebook api ( Apps >> My App >> Basic).

  1. Я видалив URL-адресу, яку я вказав ===> Додаток на Facebook (URL-адреси полотна)
  2. Я вказав URL-адресу сайту лише в ===> Веб-сайт з можливістю входу на Facebook

Тоді я дав цей AppId та App Secret на своїй веб-сторінці.

Отже, натиснувши кнопку входу, він запитує дозволи на доступ, а потім перенаправляє його на URL-адресу ( веб-сайт з Facebook- входом ).


0

Була та сама проблема:

$params = array('redirect_uri' => 'facebook.com/pages/foobar-dev');
$facebook->getLoginUrl($params);

Коли я змінив redirect_uri зі сторінки devloper на поточну сторінку, з’явилася помилка 191.

Тож я видалив параметри $:

$facebook->getLoginUrl();

Після запиту програми тепер FB переспрямовує на саму URL-адресу програми fe: my.domain.com

Зараз я перевіряю index.php мого додатка, чи перебуваю я в FB iframe чи ні. Якщо ні, я перенаправляю на поточну сторінку FB:

$app = 'facebook.com/pages/foobar-live';
$rd = (isset($_SERVER['HTTP_REFERER'])) ? parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) : false;
if ($rd == 'apps.facebook.com' || (!isset($_REQUEST['signed_request'])))  {
    echo '<script>window.parent.location = "'.$app.'";</script>';
    die();
}

0

Я також помітив, що навіть якщо ви вказали свій веб-сайт під секцією - Веб-сайт з входом у Facebook -> URL-адреса сайту, наприклад, http://example.com , але якщо розділ "Ваші додаткові домени" порожній, і ви відкриваєте веб-сайт як www.example. com Ви отримаєте і цю помилку. Щоб уникнути цього в розділі "Домени додатків", напишіть example.com, який дозволить субдомени, такі як www.example.com, something.example.com тощо


0

на сторінці додатка facebook перейдіть на основну вкладку. знайти опцію "Веб-сайт із входом у Facebook".

Ви знайдете URL-адресу сайту: там введіть повну URL-адресу (наприклад, http://Mywebsite.com/MyLogin.aspx ). це URL-адреса, яку ви можете використовувати під час дзвінка, наприклад, якщо ідентифікатор додатка - 123456789

https://graph.facebook.com/oauth/authorize?client_id=123456789&redirect_uri=http://Mywebsite/MyLogin.aspx&scope=publish_actions


0

Щось, що я хотів би додати, оскільки це перше запитання в Google про помилку 191:

Під час переадресації на facebook замість власного веб-сайту для підписаного запиту може виникнути ця помилка, якщо користувач має безпечний перегляд, а ваша програма переспрямовує на facebook без SSL.


0

Робота локально ... Я не зміг змусити api feeds працювати, але спільний api працював майже відразу без проблем.


0

Я виправив це, передавши URL-адресу переспрямування FacebookRedirectLoginHelper::getAccessToken()у функцію зворотного виклику:

Зміна від

try {
        $accessToken = $helper->getAccessToken();
}
...

до

try {
        $accessToken = $helper->getAccessToken($fbRedirectUrl);
}
...

Я розробляю на бродячому ящику, і, схоже, FacebookRedirectLoginHelper::getCurrentUrl()виникли проблеми із створенням дійсної URL-адреси.


0

Для мене це дійсні URI-адреси перенаправлення OAuth у налаштуваннях входу на Facebook. Помилка 191 зникла, як тільки я оновив правильний URI перенаправлення.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.