Facebook Javascript Sdk Fb. Login Is Not Working in Facebook iFrame

We are using Facebook JavaScript SDK to authenticate our Facebook application. The application is configured with the Canvas URL as . Following is the code we are using to authenticate the Facebook user.

    <script type="text/javascript">
          window.fbAsyncInit = function() {
              debugger;
                  FB.init({
                      appId: '<%= ViewData["AppId"].ToString() %>', // App ID
                      channelUrl: '<%= ViewData["ChannelUrl"].ToString() %>', // Channel File
                      status: true, // check login status          
                      cookie: true, // enable cookies to allow the server to access the session
                      xfbml: true,  // parse XFBML
                      oauth: true
                  });

              FB.Event.subscribe('auth.login', function(response) {
                  if (response.status === 'connected') {
                      // the user is logged in and connected to your
                      // app, and response.authResponse supplies
                      // the user’s ID, a valid access token, a signed
                      // request, and the time the access token 
                      // and signed request each expire
                      var uid = response.authResponse.userID;
                      var accessToken = response.authResponse.accessToken;
                      startApp(uid, accessToken);
                  }

              });

          };

          // Load the SDK Asynchronously
          (function(d) {    
              var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
              js = d.createElement('script'); js.id = id; js.async = true;
              js.src = "//";
              d.getElementsByTagName('head')[0].appendChild(js);
          } (document));




          function startApp(uid, accessToken) {                 
              var baseUrl = '<%= ViewData["AppBaseURL"].ToString() %>';
              var redirectUrl = baseUrl + '?uid=' + uid + '&accessToken=' + accessToken;
              window.top.location.href = redirectUrl;
              //document.location = redirectUrl;
          }          
       </script>
<fb:login-button onlogin="initiateLogin()" perms="email,user_about_me,user_birthday,friends_about_me,friends_birthday">Login with Facebook</fb:login-button>

The above code is not working in the Facebook when accessed as . However we are able to access it through

2

4 Answers

The issue is related to pop-up blocking by browser. (the fact that is working for you outside of Facebook is probably because you're allowed to do so sometimes before, for me it's blocked as well as within application).

You should never call FB.login without interaction from user (like element click or form submit) to ensure browser isn't blocking log-in window.

Update:
You mixing many things here:

  1. Page on is using Application #316853928368079 (this app and have no namespace!)
  2. Your URL for OAuth Dialog have ' (apostrophe) around client_id which is wrong!
  3. OAuth Dialog isn't working (probably also due to app settings, App Domain?)
  4. Application located on is Application #83808922524 and have wrong Canvas URL! Proof:
9
  <body>
      <div id="fb-root"></div>
      <script>
        window.fbAsyncInit = function() {
          FB.init({
            appId      : 'xxxxxxx',
            status     : true, 
            cookie     : true,
            xfbml      : true,
            oauth      : true,
          });
        };
        (function(d){
           var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
           js = d.createElement('script'); js.id = id; js.async = true;
           js.src = "//";
           d.getElementsByTagName('head')[0].appendChild(js);
         }(document));
       
       //LOGIN FUNCTION 
       function login() {
        FB.login(function(response) {
            if (response.authResponse) {
                alert('Success!');
            }else{
                alert('Login Failed!');
            }
        }, {scope: 'email'});
     }
      </script>
      <div onclick="login();">Login with Facebook</div>
    </body>

Also check if your app on deveopers.facebook.com isn't in sandbox mode. I had an issue login worked fine with my main account (which was app admin), but not with other facebook accounts. Later I realized fb app was still in sandbox mode and I had to add each account who was testing as Tester or Developer or disable sandbox mode.

Facebook suddenly switched from using their Facebook dialog method to display the authentication window to old-fashioned popup-windows today. Until now, popup windows have only been used when running apps outside a Facebook tab/canvas. This means that you can no longer run FB.login on load and use a click event instead to avoid popup blockers.

The only documentation from Facebook we've found on this is at , but apparently, this popup-window method has been available for games for several weeks now.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Robert Thorne

Robert Thorne

Automotive & Future Transportation Editor

Robert Thorne covers electric vehicle innovations, autonomous driving systems, global mobility trends, and automotive engineering developments.

Share this article
Twitter Facebook Pinterest