95
votes

I've been writing a game for Facebook using Rails and jQuery. Since I started using the Facebook Javascript SDK, using localhost as an app domain seemed to work just fine. I was able to test my game both locally and on Heroku.

In the past day, it seems that Facebook has made a big update to their developer UI. Now if I add localhost as an app domain, it gives me the following error:

This must be derived from Canvas URL, Secure Canvas URL, Site URL, Mobile Site URL, Page Tab URL or Secure Page Tab URL. Check and correct the following domains: localhost

My game also now doesn't work locally and I get an error when the Javascript SDK logs in the user:

API Error Code: 191 API Error Description: The specified URL is not owned by the application Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.

This doesn't happen when I deploy my game, since herokuapp.com is considered a valid app domain.

How am I supposed to develop and test my game if I can no longer use localhost or 127.0.0.1?

14
What values do you have for Canvas URL, Secure Canvas URL, Site URL, Mobile Site URL, Page Tab URL or Secure Page Tab URL ?Igy
hey guys i got it, you have to create a new "test app", they should f*****g mention it on the app settings page, 1h of search to finally make it work on localhost:portLouis Grellet
@LouisGrellet, Well, I'm getting "Top-level domains are not allowed". Like you said, f*****gAbhijit Sarkar
"Under Client oAuth settings, where it says Use Strict Mode for Redirect URIs make sure it’s set to No and the hit save." -- wp-native-articles.com/blog/news/…eflat

14 Answers

243
votes

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.)

32
votes
  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.
13
votes

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

9
votes

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.

5
votes

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.

5
votes

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.

5
votes

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.

2
votes

Try using the url with port, e.g.

    http://localhost:8000/

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

1
votes

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"

1
votes

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.

1
votes

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
1
votes

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

0
votes

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

0
votes

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.