Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Graph API在第一次登录时返回问号覆盖我的相册的照片,在后续登录时返回正确的图像?_Javascript_Facebook_Facebook Graph Api_Oauth_Facebook Javascript Sdk - Fatal编程技术网

Javascript 为什么Graph API在第一次登录时返回问号覆盖我的相册的照片,在后续登录时返回正确的图像?

Javascript 为什么Graph API在第一次登录时返回问号覆盖我的相册的照片,在后续登录时返回正确的图像?,javascript,facebook,facebook-graph-api,oauth,facebook-javascript-sdk,Javascript,Facebook,Facebook Graph Api,Oauth,Facebook Javascript Sdk,我正在使用Graph API的FB javascript驱动程序,允许用户从他们的Facebook帐户中选择照片。第一次连接时,系统会提示用户登录: FB.login(function(res) { if (res.status == 'connected') { auth = res.authResponse; // cache auth response getAlbums(); } }); 如果成功,我缓存返回的auth对象,并立即使用以下

我正在使用Graph API的FB javascript驱动程序,允许用户从他们的Facebook帐户中选择照片。第一次连接时,系统会提示用户登录:

FB.login(function(res) {
    if (res.status == 'connected') {
        auth = res.authResponse; // cache auth response
        getAlbums();
    }
});
如果成功,我缓存返回的auth对象,并立即使用以下内容获取用户的相册:

function getAlbums() {
    FB.api('/me/albums', function(res) {
        albums = res.data;
    });
}
使用返回的对象,我在相册上迭代并显示它们的
cover\u photo

https://graph.facebook.com/{{album.cover_photo}}/picture?type=normal&access_token={{auth.accessToken}}
用户第一次登录时,所有封面照片都是问号图标。但是,如果用户刷新或返回页面,应用程序将重新验证,识别用户已登录,并显示正确的封面照片缩略图


我如何让新认证的用户能够看到他们的封面照片?

我不确定,但我认为您尚未订阅authResponseChange

下面的简单代码与您正在寻找的代码相同-

<html>
<head></head>
<body>
<div id="fb-root"></div>
<script>
var access_token = "";
window.fbAsyncInit = function() 
{
    FB.init({
        appId      : '<APP-ID>',
        status     : true,
        cookie     : true,
        xfbml      : true 
    });

    FB.Event.subscribe('auth.authResponseChange', function(response) 
    {
        access_token = response.authResponse.accessToken;
        if (response.status === 'connected') 
        {
            FetchUserPhotos();
        } 
        else if (response.status === 'not_authorized') 
        {
            FB.login('scope: user_photos');
        } 
        else 
        {
            FB.login('scope: user_photos');
        }
    });
};

// 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 FetchUserPhotos() 
{
    FB.api('/me/albums', function(response) 
    {
        var albums = response.data;
        for(var i=0; i<albums.length; i++)
        {
            var album = albums[i];
            if(album.cover_photo != undefined)
            {
               FB.api("/"+album.cover_photo+"?access_token="+access_token, function(cover_photo)
               {
                   console.log(cover_photo.source);
               });       
               //console.log("https://graph.facebook.com/"+album.cover_photo+"/picture?type=normal&access_token="+access_token);
            }
         }          
    });
}
</script>

<fb:login-button scope="user_photos" show-faces="true" width="200" max-rows="1"></fb:login-button>
</body>
</html>

var access_token=“”;
window.fbAsyninit=函数()
{
FB.init({
appId:“”,
状态:正确,
曲奇:是的,
xfbml:对
});
FB.Event.subscribe('auth.authResponseChange',函数(响应)
{
access_token=response.authResponse.accessToken;
如果(response.status===“已连接”)
{
FetchUserPhotos();
} 
else if(response.status===“未授权”)
{
FB.login('范围:用户照片');
} 
其他的
{
FB.login('范围:用户照片');
}
});
};
//异步加载SDK
(职能(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);
}(文件);
函数FetchUserPhotos()
{
FB.api('/me/albums',函数(响应)
{
var albums=response.data;

对于(var i=0;当相册中没有图像时,封面图像是一个问号。我想由于某种原因,您的对象在第一次身份验证时没有正确加载。您在代码中是否正确使用回调?我用空访问令牌重现了此问题,请尝试console.log您在FB.login回调中获得的参数关于auth事件很有趣,但是,问题不是检索相册,而是在用户第一次登录应用程序时从这些相册中检索封面照片。一旦他们返回封面照片,封面照片将正常显示。好的,但封面照片也会一次性取回,对吗?我已编辑代码以获取封面照片及其工作金·古德谢,不过,我正在取回图像,但它们显示的是问号“默认”因此,一个简单的console.log可能不足以证明它工作正常。您是否尝试从console.log打开链接?当我尝试打开时,所有图像都可以正常打开。我认为更好的解决方案是直接获取图像url,因为在图像url中使用access\u标记不是一个好主意。因此,您应该使用
FB.api(“/”+album.cover\u photo)
-编辑了答案。请检查