来自公共用户的Facebook app登录问题

时间:2015-10-01 06:22:27

标签: facebook magento login public

我创建了Facebook应用并与magento集成,当公共用户尝试登录到fb时显示此错误。

Facebook app login issue from public users<code>enter here</code>] 1

我的要求是当用户从magento网站登录Facebook时需要显示用户图像和相册,但此过程使用管理员详细信息(从管理员详细信息获取配置文件图像和相册)

window.fbAsyncInit = function() {
  FB.init({ appId: facebook_app_id, 
        status: true, 
        cookie: true,
        xfbml: true,
        oauth: true});
  function updateButton(response) {
    var button = document.getElementById('fb-auth');
        
    if (response.authResponse) {
      //user is already logged in and connected
    	document.getElementById("fbaccesstoken").value = response.authResponse.accessToken;
      var userInfo = document.getElementById('user-info'),
          photos_album  = document.getElementById('photos_album');
      FB.api('/me', function(response) {
       /* userInfo.innerHTML = '<img src="https://graph.facebook.com/' 
        			+ response.id + '/picture" />' + response.name;
        button.innerHTML = 'Logout';*/
      });
      FB.api('/me/albums', function(response){
        var l=response.data.length,
            rs_all,
            all_img;
        if(l > 0){
            rs_all ='<select id="fb_album" onchange="get_all_photos(this.value)"><option value="0">-- Select your album --</option>';
            for (var i=0; i<l; i++){
                var album = response.data[i],
                    albumid = album.id;
                    rs_all += '<option value="'+album.id+'">'+album.name+'</option>';
            }
            rs_all += '</select>';
            userInfo.innerHTML = rs_all;
        }
        //
      });
      get_all_photos = function(id){
        if(id==0){
            photos_album.innerHTML = '';
            return;
        }
        FB.api("/"+id+"/photos",function(response){
        	console.log(response);
            var photos = response["data"],
                pt_result = '<ul>';
            for(var pt=0;pt<photos.length;pt++) {
                console.log(photos[pt].images);
                //pt_result += '<li><img color="" src="'+photos[pt].images[0].source+'" /></li>';
                //pt_result += '<li><img color="" src="https://graph.facebook.com/' + photos[pt].id + '/picture'+'" /></li>';
                pt_result +=  '<img src="https://graph.facebook.com/'+photos[pt].id + '/picture?access_token='+document.getElementById("fbaccesstoken").value+'" style="margin-right:5px"/>';
            }
            photos_album.innerHTML = pt_result+'</ul>';
        });
      }
      button.onclick = function() {
        FB.logout(function(response) {
          var userInfo = document.getElementById('user-info');
          userInfo.innerHTML="";
    });
      };
    } else {
      //user is not connected to your app or logged out
      //button.innerHTML = 'Please Login Facebook';
      button.onclick = function() {
        FB.login(function(response) {
      if (response.authResponse) {
            FB.api('/me', function(response) {
          var userInfo = document.getElementById('user-info');
          //userInfo.innerHTML = 
           //     '<img src="https://graph.facebook.com/' 
            //+ response.id + '/picture" style="margin-right:5px"/>' 
           // + response.name;
        });    
          } else {
            //user cancelled login or did not grant authorization
          }
        }, {scope:'user_photos'});    
      }
    }
  }

  // run once with current status and whenever the status changes
  FB.getLoginStatus(updateButton);
  FB.Event.subscribe('auth.statusChange', updateButton);    
};

2 个答案:

答案 0 :(得分:1)

&#13;
&#13;
window.fbAsyncInit = function() {
  FB.init({ appId: facebook_app_id, 
        status: true, 
        cookie: true,
        xfbml: true,
        oauth: true});
  function updateButton(response) {
    var button = document.getElementById('fb-auth');
        
    if (response.authResponse) {
      //user is already logged in and connected
    	document.getElementById("fbaccesstoken").value = response.authResponse.accessToken;
      var userInfo = document.getElementById('user-info'),
          photos_album  = document.getElementById('photos_album');
      FB.api('/me', function(response) {
       /* userInfo.innerHTML = '<img src="https://graph.facebook.com/' 
        			+ response.id + '/picture" />' + response.name;
        button.innerHTML = 'Logout';*/
      });
      FB.api('/me/albums', function(response){
        var l=response.data.length,
            rs_all,
            all_img;
        if(l > 0){
            rs_all ='<select id="fb_album" onchange="get_all_photos(this.value)"><option value="0">-- Select your album --</option>';
            for (var i=0; i<l; i++){
                var album = response.data[i],
                    albumid = album.id;
                    rs_all += '<option value="'+album.id+'">'+album.name+'</option>';
            }
            rs_all += '</select>';
            userInfo.innerHTML = rs_all;
        }
        //
      });
      get_all_photos = function(id){
        if(id==0){
            photos_album.innerHTML = '';
            return;
        }
        FB.api("/"+id+"/photos",function(response){
        	console.log(response);
            var photos = response["data"],
                pt_result = '<ul>';
            for(var pt=0;pt<photos.length;pt++) {
                console.log(photos[pt].images);
                //pt_result += '<li><img color="" src="'+photos[pt].images[0].source+'" /></li>';
                //pt_result += '<li><img color="" src="https://graph.facebook.com/' + photos[pt].id + '/picture'+'" /></li>';
                pt_result +=  '<img src="https://graph.facebook.com/'+photos[pt].id + '/picture?access_token='+document.getElementById("fbaccesstoken").value+'" style="margin-right:5px"/>';
            }
            photos_album.innerHTML = pt_result+'</ul>';
        });
      }
      button.onclick = function() {
        FB.logout(function(response) {
          var userInfo = document.getElementById('user-info');
          userInfo.innerHTML="";
    });
      };
    } else {
      //user is not connected to your app or logged out
      //button.innerHTML = 'Please Login Facebook';
      button.onclick = function() {
        FB.login(function(response) {
      if (response.authResponse) {
            FB.api('/me', function(response) {
          var userInfo = document.getElementById('user-info');
          //userInfo.innerHTML = 
           //     '<img src="https://graph.facebook.com/' 
            //+ response.id + '/picture" style="margin-right:5px"/>' 
           // + response.name;
        });    
          } else {
            //user cancelled login or did not grant authorization
          }
        }, {scope:'user_photos'});    
      }
    }
  }

  // run once with current status and whenever the status changes
  FB.getLoginStatus(updateButton);
  FB.Event.subscribe('auth.statusChange', updateButton);    
};
&#13;
&#13;
&#13;

答案 1 :(得分:0)

首先,正如错误消息所示,您的应用程序处于开发模式。进入应用程序的“状态和审核”选项卡,然后使用此文本旁边的开关:

  

您想让这个应用及其所有实时功能向公众开放吗?

话虽如此,您需要使用user_photos进行审核流程,或者该权限仅适用于在您的应用中具有角色的用户。您可以在此处找到有关登录审核的所有信息:https://developers.facebook.com/docs/facebook-login/review

顺便说一句,您不需要getLoginStatus并订阅活动auth.statusChange。这是一个教程,详细说明了登录和刷新返回用户访问令牌所需的一切:http://www.devils-heaven.com/facebook-javascript-sdk-login/