Facebook 应用程序: localhost 不再作为应用程序域工作

我一直在用 Rails 和 jQuery 为 Facebook 写一个游戏。自从我开始使用 Facebook Javascript SDK 以来,使用 localhost 作为应用程序域似乎效果不错。我可以在本地和 Heroku 上测试我的游戏。

在过去的一天里,Facebook 似乎对他们的开发者用户界面做了一个大的更新。现在,如果我添加 localhost 作为应用程序域,它会给我以下错误:

这必须派生自画布 URL,安全画布 URL,网站 URL,移动网站 URL,网页标签 URL 或安全网页标签 URL。检查并更正以下域: localhost

我的游戏现在也不能在本地工作,当 Javascript SDK 登录到用户时,我得到一个错误:

API 错误代码: 191 API 错误描述: 指定的 URL 不是 错误消息: 无效的重定向 _ uri: 给定 应用程序配置不允许 URL。

这在我部署游戏时不会发生,因为 herokuapp.com 被认为是一个有效的应用程序域名。

如果我不能再使用 localhost 或127.0.0.1,我该如何开发和测试我的游戏?

93592 次浏览

Just add localhost as your canvas url or mobile site url, this will allow you to have both localhost and herokuapp.com in your App Domain setting. Then once your app is in production, just remove it.

Try using the url with port, e.g.

    http://localhost:8000/

I was having the same issue and found this solution right now.

The protocol seems to keep changing, and the accepted answer didn't work for me today. In case it helps other searchers, this is what did work for me:

  • All changes were made on the Settings page under the Basic tab

1.) In the center under the first box of options, click "+ Add Platform" and choose "Website" (or whatever is appropriate for your app.)

2.) In the box that comes up for the website you just added: Site URL: http://localhost:3000/

3.) In the box above that (Settings => Basic): App Domain: localhost

4.) At the bottom right - click "Save Changes"

5.) Make sure you have the app ID copied and pasted correctly into your code. (The ID is in the first box on that page if you need it again.)

This works for me in heroku, the localhost thing didn't work (for me). I hope it helps

1.) In the center under the first box of options, click "+ Add Platform" and choose "Website" (or whatever is appropriate for your app.)

2.) In the box that comes up for the website you just added: Site URL: http://MYAPP.herokuapp.com/ (replace MYAPP with the name of your app)

3.) In the box above that (Settings => Basic): App Domain: MYAPP.herokuapp.com (replace MYAPP with the name of your app)

4.) At the bottom right - click "Save Changes"

Just a note for some others who may be struggling with this as I was. I have not been able to get this to work with "test" apps. Using my actual app settings (and simply adding

"http://localhost:3000/"

to my canvas URL) worked as everyone else suggested. It seems test apps aren't equal to actual apps.

For me it worked like this:

Configuring the facebook app dashboard:

*On the ' basic ' tab:

1) Leaving app domain empty.

2) Erasing any platform. Meaning: no website no canvas platform. (so no site-URL field to fill)

*On the 'advanced' tab:

3) I entered into the Valid OAuth redirect URIs:

http://localhost/myappfolder/redirect.php

4) regarding my code, insdie my c:/xampp/htdocs/localhost/myappfolder/index.php (this file makes the loginURL):

$helper = new FacebookRedirectLoginHelper('http://localhost/myappfolder/redirect.php');

inside the redirect.php file:

$helper = new FacebookRedirectLoginHelper('http://localhost/myappfolder/redirect.php');

and I got a session! finally! no need to hang myself in the end :P

This is wrong way. You must create a test application using Test tab in app settings. And then you can enter your development stage url (for example localhost) to your application.

You can still test your app without deploying it on a remote sever like heroku. The trick is to update the etc/hosts file this way:

127.0.0.1 mydomain.com

Then on the Facebook App's settings, type [http://] mydomain.com, without the "[" and "]"

It worked for me this way

  1. Go to your App's settings page in http://developers.facebook.com
  2. Click on the dropdown arrow on the top left (next to the name of your app) and click "Create Test App" and give it a name
  3. In the Settings > Basic of that new Test App set the App Domains as "localhost"
  4. Also set the Website Site URL as "http://localhost:8888" (or whatever port you are using).
  5. IMPORTANT: this app has different App ID and App Secret from your online application. So, last step: make sure that you update the code that sits in your localhost with the Test App's App ID and App Secret. On the contrary, the code that sits in the live server should be using the main App's ID and Secret.

Solution using Firebase

In order to get this working on localhost, port 3000 I did the following:

  1. Create App

Create Test App

  1. Now Select "+ Create Test App" from the arrow dropdown (top left).

enter image description here

  1. Add localhost to App Domains

enter image description here

  1. Add http://localhost:3000/ to Site URL by selected "+ Add Platform"

enter image description here

Up to this point I had followed all previous answers submitted on here, but nothing worked.

So...

  1. In the left hand menu, select "Add Product"

  2. Add "Facebook Login"

You will be presented with a workflow carrousel, with defaulted domain http://localhost:3000/, click "continue" until the end.

  1. Select "Facebook Login > Settings" from the Product Menu.

  2. Enter your Firebase OAuth redirect URI (found when enable Facebook Login in your firebase console https://console.firebase.google.com, example below)

enter image description here

  1. Paste URI and Save.

enter image description here

Done.

For everybody who is fidgeting with this in 2017. The interface changed again. I wanted to comment this to the answer but I don't have enough reputation. The localhost url of your app now has to be copied to three places. Currently, (October 26th, 2017) the sequence is:

1.) Click "Settings" in the left menu.

2.) In the center under the first box of options, click "+ Add Platform" and choose "Website" (or whatever is appropriate for your app.)

3.) In the box that comes up for the website you just added copy your localhost site url (f.e. http://localhost:3000/)

4.) In the box above that "App Domain" copy the same URL

5.) At the bottom right - click "Save Changes"

6.) In the left menu under "Products" click "Facebook Login" (or add it via "+ Add Products" if it is not available)

7.) You are now in the Facebook Login settings. Copy the same url to the field "Valid OAuth redirect URIs"

This should work.

I ran into an issue with my Rails app that I usually run with http://localhost:3000 because Facebook now requires the Valid OAuth redirect to use https.

To use https locally, I used [ngrok][1] which allows you to use https by providing a tunnel. To do this:

  1. I went to their website and downloaded their program
  2. I extracted the file for the program
  3. In my console, I went into the directory where ngrok was extracted to and entered 'grok http 3000' on my Windows machine, others may use './grok http 3000'
  4. After entering that, ngrok provided a https address which I put into the Valid OAuth Redirect URIs field in Facebook
  5. Then I started my server and was able to access it using that https address instead of localhost:3000

to do local testing all you have to do is turn off the app, or put the facebook app in development mode. Then Facebook will allow you alone to access the app

For those still having this issue, make sure your app is in development mode while trying to use localhost as the app domain else it won't work.

After straggling with this for a while I found a solution that combines few answers from this question. I guess that things constantly change when it comes to things like Facebook apps.

The following worked for me at the time of writing.
The key takeaways are:

  • You must use HTTPS in your backend. You may use a self-signed certificate.
  • To test against localhost you must create a test app from your primary app

TL;DR

  1. Make sure your server exposes an HTTPS enabled port with a self-sign certificate. Consult your server documentation.
  2. Go to https://developers.facebook.com/apps and select "Create App". Select app type that supports Facebook login (E.g. consumer), click continue
  3. Set a display name and contact email and click "Create App"
  4. Optional! When the prompt to Add Products to Your App choose Add Facebook login. Here you will set your production login setting with a real domain, but you can focus on tests app at this stage.
  5. Go to the left side of the page where your app name is displayed. In the select box and click the small arrow. When the select box expand click the button "Create Test App" enter image description here
  6. On the create test app popup select "Create Test App"
  7. On the newly created test App go to "Add a Product" and "Add Facebook login" by clicking "Set up"
  8. Ignore the setting by selecting the settings list under the "Facebook Login" on the left side of the page.
  9. Note the info message at the top "You are currently editing a test version of ..." enter image description here
  10. Verify that both Client OAuth Login and Web OAuth Login are enabled (blue yes)
  11. Under the "Valid OAuth Redirect URIs" add your local HTTPs address e.g. https://localhost:8443
  12. Click save changes.
  13. Click Setting basic on the left side of the page and copy your App Id and App Secret and keep them in a safe place

Common pitfalls

  • Make sure that you use your test app secrets when you test and not the main app, resulting in the following error

Can't load URL The domain of this URL isn't included in the app's domains. To be able to load this URL, add all domains and sub-domains of your app to the App Domains field in your app settings.

enter image description here

  • Make sure you use https://localhost:8443 and not https://127.0.0.1:8443 those are not the same from OAuth point of view resulting in an error similar to the one below

URL blocked This redirect failed because the redirect URI is not white-listed in the app's client OAuth settings. Make sure that the client and web OAuth logins are on and add all your app domains as valid OAuth redirect URIs.

enter image description here

In case you are using Hotwire, remember to use button_to instead of link_to and disable Turbo on it. E.g:

<%= button_to "Register with Facebook", user_facebook_omniauth_authorize_path, form: { "data-turbo" => "false"}, method: :post %>