Facebook login with JavaScript SDK error: "redirect URI not whitelisted"

48,380

Solution 1

You must make sure you have registered your app with the developer page Go here

For the facebook login docs Go here

Then when you register your app make sure whatever URL you are using as the redirect page is the same as your app is sending too.

For example http://example.com is not, http://www.example.com

To settup url as the local host refer to this post

Please make sure you are setting your

$app_id = "xxx"; 
$app_secret = "xxx"; 
$my_url ="http://localhost:3080/example.php";

All to the correct data as specified inside your app settings when you create your app on facebook's developer page.

To make this as clear as possible.

Go to your app page and enter the url of the page in your localhost. Then go to your code and add the exact same url.

in app settings,

http://localhost

in your code

http://localhost

If there is a port number after your localhost,

in app settings,

http://localhost:8080

in your code

http://localhost:8080

If there is a file after your localhost

in app settings,

http://localhost/myfile.php

in your code

    http://localhost/myfile.php

Please try this code. replace your code with this code and do not forget to change the

YOUR_FACBEOOK_APP_ID

to your own.

  <div id="fb-root"></div>

    <script>
    window.fbAsyncInit = function() {
            FB.init({
            appId: 'xxxxxxxxxxxxx',
            status: true,
            cookie: true,
            xfbml: true
        });
    };

    // Load the SDK asynchronously
    (function(d){
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
    }(document));

    function login() {
        FB.login(function(response) {

        // handle the response
        console.log("Response goes here!");

        }, {scope: 'read_stream,publish_stream,publish_actions,read_friendlists'});            
    }

    function logout() {
        FB.logout(function(response) {
          // user is now logged out
        });
    }

    var status = FB.getLoginStatus();

    console.log(status);

    </script>

    <button onclick="javascript:login();">Login Facebook</button>

    <br>

    <button onclick="javascript:logout();">Logout from Facebook</button>

Solution 2

In my case, modifying the /etc/hosts file to map '127.0.0.1' to something like myapp.com - so that your application has a “real” URL, resolved the issue. Same is to be added to "Valid OAuth redirect URIs" in the Client OAuth Settings.

Share:
48,380
user1844634
Author by

user1844634

Updated on July 17, 2022

Comments

  • user1844634
    user1844634 almost 2 years

    I want my website to login with facebook but I am seeing this error.

    Given URL is not whitelisted in Client OAuth Settings: This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings. Make sure Client and Web OAuth Login are on and add all your app domains as Valid OAuth Redirect URIs.

    <!DOCTYPE html>
        <html>
        <head>
        <title>Facebook Login JavaScript Example</title>
        <meta charset="UTF-8">
        </head>
        <body>
        <script>
          // This is called with the results from from FB.getLoginStatus().
          function statusChangeCallback(response) {
            console.log('statusChangeCallback');
            console.log(response);
            // The response object is returned with a status field that lets the
            // app know the current login status of the person.
            // Full docs on the response object can be found in the documentation
            // for FB.getLoginStatus().
            if (response.status === 'connected') {
              // Logged into your app and Facebook.
              testAPI();
            } else if (response.status === 'not_authorized') {
              // The person is logged into Facebook, but not your app.
              document.getElementById('status').innerHTML = 'Please log ' +
                'into this app.';
            } else {
              // The person is not logged into Facebook, so we're not sure if
              // they are logged into this app or not.
              document.getElementById('status').innerHTML = 'Please log ' +
                'into Facebook.';
            }
          }
    
          // This function is called when someone finishes with the Login
          // Button.  See the onlogin handler attached to it in the sample
          // code below.
          function checkLoginState() {
            FB.getLoginStatus(function(response) {
              statusChangeCallback(response);
            });
          }
    
          window.fbAsyncInit = function() {
          FB.init({
              appId: 'XXXXXXXXXXXX',
            cookie     : true,  // enable cookies to allow the server to access 
                                // the session
            xfbml      : true,  // parse social plugins on this page
            version    : 'v2.5' // use version 2.2
          });
    
          // Now that we've initialized the JavaScript SDK, we call 
          // FB.getLoginStatus().  This function gets the state of the
          // person visiting this page and can return one of three states to
          // the callback you provide.  They can be:
          //
          // 1. Logged into your app ('connected')
          // 2. Logged into Facebook, but not your app ('not_authorized')
          // 3. Not logged into Facebook and can't tell if they are logged into
          //    your app or not.
          //
          // These three cases are handled in the callback function.
    
          FB.getLoginStatus(function(response) {
            statusChangeCallback(response);
          });
    
          };
    
          // Load the SDK asynchronously
          (function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) return;
            js = d.createElement(s); js.id = id;
            js.src = "//connect.facebook.net/en_US/sdk.js";
            fjs.parentNode.insertBefore(js, fjs);
          }(document, 'script', 'facebook-jssdk'));
    
          // Here we run a very simple test of the Graph API after login is
          // successful.  See statusChangeCallback() for when this call is made.
          function testAPI() {
            console.log('Welcome!  Fetching your information.... ');
            FB.api('/me', function(response) {
              console.log('Successful login for: ' + response.name);
              document.getElementById('status').innerHTML =
                'Thanks for logging in, ' + response.name + '!';
            });
          }
        </script>
    
        <!--
          Below we include the Login Button social plugin. This button uses
          the JavaScript SDK to present a graphical Login button that triggers
          the FB.login() function when clicked.
        -->
    
        <fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
        </fb:login-button>
    
        <div id="status">
        </div>
    
        </body>
        </html>
    
  • user1844634
    user1844634 over 8 years
    I have registered an app. that app is live and running and not sure what i have missed .it'snot working
  • user1844634
    user1844634 over 8 years
    It complains Given URL is not whitelisted in Client OAuth Settings: This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings . what i need to do
  • user1844634
    user1844634 over 8 years
    Yes i am using the correct url
  • user1844634
    user1844634 over 8 years
    i have registered with http
  • user1844634
    user1844634 over 8 years
    yes, all are with www
  • user1844634
    user1844634 over 8 years
    both in the app and the register are with http.www
  • user1844634
    user1844634 over 8 years
    Does my app need to be reviewed before it gets worked?
  • user1844634
    user1844634 over 8 years
    I am testing that feature in my localmachine. so it runs on the localhost. after i click the login button url turns out to be like this ....facebook.com/v2.5/dialog/…
  • user1844634
    user1844634 over 8 years
    what i need to provide to test in localhost. Could u tell me briefly what i need to do .suppose if my website name test123.com. what urls i need to give in the app
  • user1844634
    user1844634 over 8 years
    I am using the same piece of code that is there in the facebook website and just added my app id. when i am trying to log in it's not working
  • wuno
    wuno over 8 years
    Please post the code so I can look at it.
  • user1844634
    user1844634 over 8 years
    I have posted the code below please check it
  • user1844634
    user1844634 over 8 years
    I have used the above code that u posted. I am seeing the same error.
  • wuno
    wuno over 8 years
    Please try this updated code. change out your app id
  • user1844634
    user1844634 over 8 years
    Still i am seeing the same error
  • wuno
    wuno over 8 years
    Show me the exact url from facebook settings
  • John
    John about 8 years
    Why would one need to whitelist a redirect uri anyway? This is an in-browser workflow with facebook's javascript sdk. There is no callback to be provided, and indeed Facebook's own sample code doesn't provide one either. I'm seeing the same effect after I switched web oath off in the settings. Very odd.