Facebook API lỗi 191


76

Tôi đang cố gắng tích hợp dự án của mình với Facebook. Lúc đầu, tôi đang thực hiện các bước nhỏ và chỉ cố gắng đăng nhập, tạo phiên Facebook và lấy một số dữ liệu người dùng. Tôi đang phát triển nó cục bộ nên cài đặt ứng dụng Facebook của tôi là:

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

URL canvas giống như trên. Tôi chưa chỉ định miền trang web.

Tuy nhiên, khi tôi nhấp vào nút đăng nhập, tôi gặp lỗi:

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.

Hiện tại, tôi chưa viết bất kỳ mã phía máy chủ nào để đối phó với chuyển hướng, v.v. Tất cả những gì tôi đã làm là thêm JavaScript SDK dựa trên hướng dẫn trong Facebook dành cho Trang web .

Tôi đã làm gì sai? Rõ ràng đó là điều cần làm với cài đặt ứng dụng Facebook của tôi, nhưng tôi không thể thấy gì!


Đối với độc giả: vui lòng lưu ý rằng câu hỏi này và câu trả lời được chấp nhận áp dụng cho cả máy chủ cục bộ & phát triển / thử nghiệm cũng như các máy chủ và url thực!
Stefano

Câu trả lời:


88

CẬP NHẬT:
Để trả lời Mã lỗi API: 191
Giá trị redirect_uriphải bằng (hoặc tương đối) với URL của trang web.
nhập mô tả hình ảnh ở đây

Mẹo: Sử dụng URL cơ sở thay vì URL đầy đủ trỏ đến các trang cụ thể.

KHÔNG ĐƯỢC KHUYẾN NGHỊ: Ví dụ: nếu bạn sử dụng www.mydomain.com/fb/test.htmllàm URL trang web của mình và có www.mydomain.com/fb/secondPage.htmlnhư redirect_urivậy sẽ gây ra lỗi 191.

KHUYẾN CÁO: Vì vậy, thay vào đó hãy đặt URL trang web của bạn thành URL cơ sở như: www.mydomain.com/HOẶC www.mydomain.com/fb/.


Tôi đã xem qua ứng dụng mẫu Python của Facebook ngày hôm nay và tôi đã rất ngạc nhiên khi nó tuyên bố rõ ràng rằng bạn có thể sử dụng http://localhost:8080/làm URL trang web nếu bạn đang phát triển cục bộ:

Định cấu hình URL trang và trỏ nó đến Máy chủ Web của bạn. Nếu bạn đang phát triển cục bộ, bạn có thể sử dụng http: // localhost: 8080 /

Trong khi tôi đã chắc chắn rằng bạn không thể làm điều đó, dựa trên kinh nghiệm của riêng tôi (rất cũ kiểm tra mặc dù) có vẻ như bạn thực sự THỂ thử nghiệm ứng dụng Facebook của bạn tại địa phương!

Vì vậy, tôi đã chọn một ứng dụng cũ của mình và chỉnh sửa tên của nó, URL trang web và URL canvas: URL trang web: http://localhost:80/fblocal/

Tôi đã tải xuống Facebook PHP-SDK mới nhất và ném nó vào xampp/htdocs/fblocal/thư mục của mình .

Nhưng tôi cũng bị lỗi giống như của bạn! Tôi nhận thấy rằng XAMPP đang thực hiện chuyển hướng tự động đến http://localhost/fblocal/vì vậy tôi đã thay đổi cài đặt thành đơn giản http://localhost/fblocal/và lỗi đã biến mất NHƯNG tôi phải xóa ứng dụng (khỏi cài đặt quyền riêng tư ) và cài đặt lại ứng dụng của mình và đây là kết quả:
văn bản thay thế

Sau đó, tôi đã yêu cầu sự publish_streamcho phép và tôi có thể xuất bản lên hồ sơ của mình (sử dụng 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;
    }
}

Các kết quả: văn bản thay thế


1
Ừm, nên bây giờ tôi đang bối rối. Còn về câu trả lời này: stackoverflow.com/questions/4633846/facebook-app-development
musoNic80

1
Tôi GUESS những gì ông có nghĩa là bạn có thể thử nghiệm ứng dụng của bạn tại địa phương, nhưng bất kỳ sự tương tác với facebook sẽ yêu cầu xuất bản trang web của bạn / tên miền. Ví dụ: nếu bạn có một trò chơi flash, bạn có thể kiểm tra nó cục bộ trước đó thông qua nó trên FB canvas. Về phần mã sau đó, anh ấy đang giải thích cách bạn có thể bảo vệ trang web trực tiếp của mình khỏi bị truy cập cho đến khi quá trình phát triển kết thúc và bạn đã sẵn sàng hoạt động.
ifaour

2
Càng xa càng tốt! Tôi đã có hộp thoại đăng nhập và yêu cầu quyền! Tôi chưa có cơ hội để kiểm tra việc lấy một số dữ liệu thực tế, nhưng mong câu trả lời được chấp nhận khi tôi thực hiện! Tuyệt vời!
musoNic80

bạn đã cài đặt lại ứng dụng như thế nào? Tôi đang ở Sandbx Mode và nhận được cùng một lỗi 191, trừ khi tôi truy cập REDIRECT_URL tôi trực tiếp trên trình duyệt mà sau đó chỉ cho tôi Auth Dialog
Volatil3

@ Volatil3, tôi vừa xóa nó khỏi danh sách ứng dụng của mình trong cài đặt quyền riêng tư.
ifaour

11

Đối với tôi, đó là một miền ứng dụng bị thiếu. Truy cập ứng dụng và đảm bảo rằng bạn đã thiết lập thư mục gốc của trang web làm miền ứng dụng. Xem ảnh chụp màn hình.

miền ứng dụng nằm trong cài đặt cơ bản của ứng dụng của bạn


Câu trả lời này không liên quan đến câu hỏi vì người đăng ban đầu đang phát triển cục bộ và trường Tên miền ứng dụng không cho phép localhost hoặc 127.0.0.1: fl.kr/p/kHqiny
Vince

4
Câu hỏi của người hỏi đã được giải quyết. Câu trả lời này nhằm hữu ích cho những người có vấn đề tương tự, những người nghĩ rằng câu hỏi này sẽ giúp họ dựa trên tiêu đề in đậm lớn. Bây giờ nó có thể.
Mike_K Ngày

8

Đây chỉ là do lỗi URL.

Bất kỳ URL trang web nào được chỉ định phải chính xác.

Tôi đã đề cập đến URL của trang web http://localhost:3000/ và tên miền là localhost, nhưng trong trình duyệt của tôi, tôi đang chạy http://0.0.0.0:3000/.

Khi tôi chạy máy chủ vì localhost:3000nó đã giải quyết được sự cố.

Như tôi đã đề cập, URL trang web là localhost Facebook sẽ chuyển hướng đến cùng, nếu chúng tôi đang chạy 0.0.0.0:3000, nó sẽ xuất hiện lỗi "Đã cho URL không được cấu hình Ứng dụng cho phép".


2

Tôi cũng gặp phải vấn đề tương tự khi tôi đang sử dụng phương pháp xác thực facebook. Nhưng tôi đã khắc phục vấn đề đó bằng các thay đổi sau trong api Facebook ( Apps >> My App >> Basic).

  1. Tôi đã xóa url mà tôi đã cung cấp trong ===> Ứng dụng trên Facebook (URL Canvas)
  2. Tôi chỉ cung cấp url trang web trong ===> Trang web có tùy chọn Đăng nhập Facebook

Sau đó, tôi đã đưa AppId và Bí mật ứng dụng đó vào trang web của mình.

Vì vậy, bằng cách nhấp vào nút đăng nhập, Nó yêu cầu quyền truy cập sau đó nó chuyển hướng nó để cung cấp url ( Trang web có Đăng nhập Facebook ).


0

Gặp vấn đề tương tự:

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

Khi tôi thay đổi redirect_uri từ trang devloper sang trang trực tiếp, lỗi 191 xuất hiện.

Vì vậy, tôi đã xóa $ params:

$facebook->getLoginUrl();

Sau khi yêu cầu ứng dụng bây giờ FB chuyển hướng đến chính url của ứng dụng fe: my.domain.com

Những gì tôi làm bây giờ là kiểm tra index.php của ứng dụng của tôi xem tôi có ở trong iframe FB hay không. Nếu không, tôi chuyển hướng đến trang FB trực tiếp fe:

$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

Tôi cũng nhận thấy rằng ngay cả khi bạn chỉ định trang web của mình theo phần - Trang web có Đăng nhập Facebook -> Url trang web, ví dụ: http://example.com , nhưng nếu phần Miền ứng dụng của bạn trống và bạn mở trang web dưới dạng www.example. com bạn cũng sẽ gặp lỗi này. Để tránh nó trong phần "Tên miền ứng dụng", hãy viết example.com, điều đó sẽ cho phép các tên miền phụ, như www.example.com, something.example.com, v.v.


0

trong Trang ứng dụng facebook, hãy chuyển đến tab cơ bản. tìm Tùy chọn "Trang web với Đăng nhập Facebook".

bạn sẽ tìm thấy URL của trang web: nhập vào đó đặt URL đầy đủ (ví dụ: http://Mywebsite.com/MyLogin.aspx ). đây là URL bạn có thể sử dụng với cuộc gọi như Nếu ID APP là 123456789

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


0

Tôi muốn thêm điều gì đó, vì đây là lỗi 191 câu hỏi đầu tiên trên google:

Khi chuyển hướng đến facebook thay vì trang web của riêng bạn cho một yêu cầu đã ký, bạn có thể gặp lỗi này nếu người dùng bật duyệt web an toàn và ứng dụng của bạn chuyển hướng đến facebook mà không có SSL.


0

Làm việc tại địa phương ... Tôi không thể làm cho api nguồn cấp dữ liệu hoạt động, nhưng api chia sẻ hoạt động khá tốt ngay lập tức mà không có vấn đề gì.


0

Tôi đã sửa lỗi này bằng cách chuyển url chuyển hướng đến FacebookRedirectLoginHelper::getAccessToken()trong hàm gọi lại của mình:

Thay đổi từ

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

đến

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

Tôi đang phát triển trên một hộp lang thang và có vẻ như FacebookRedirectLoginHelper::getCurrentUrl()có vấn đề khi tạo một url hợp lệ.


0

Đối với tôi, đó là URI chuyển hướng OAuth hợp lệ trong Cài đặt đăng nhập Facebook. Lỗi 191 sẽ biến mất sau khi tôi cập nhật URI chuyển hướng chính xác.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.