2015-09-07 12 views
5

Tôi cố gắng sử dụng Đăng nhập FB trên trang web của mình và cần nhận thông tin người dùng (email, public_profile, ngày sinh và vị trí). Nhưng sau khi đăng nhập chỉ có tên và facebookId của người dùng mà tôi nhận được. Mã:Phạm vi email không hoạt động được sử dụng trong FB Đăng nhập

<img src="" alt="" onclick="fblogin();"/> 

Javascript phần:

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 is called with the results from from FB.getLoginStatus(). 
    function checkLoginState() { 
     FB.getLoginStatus(function (response) { 
      statusChangeCallback(response); 
     }); 
    } 



    function fblogin() 
    { 
     checkLoginState(); 
     FB.login(function (response) { 
      if (response.authResponse) { 
       console.log('Bilgiler Alınıyor'); 
       FB.api('/me', function (response) { 

        console.log(JSON.stringify(response)); 
       }); 
      } else { 
       console.log('User cancelled login or did not fully authorize.'); 
      } 
     }, { scope: 'user_about_me,email,public_profile' }); 
    } 


    window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '{app-id}', 
      xfbml: true, 
      version: 'v2.4' 
     }); 

     FB.getLoginStatus(function (response) { 
      if (response.status === 'connected') { 
       console.log(response.authResponse.accessToken); 
      } 
     }); 
    }; 

    (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')); 

JSON kết quả:

{"name":"Name Surname","id":"xxxxxxxxxxxxxxxxx"} 

Không email hoặc bất kỳ thông tin khác.

Trả lời

14

Đó là một vấn đề nổi tiếng, tìm kiếm cho "Declarative Fields" trong changelog: https://developers.facebook.com/docs/apps/changelog#v2_4

Ví dụ:

FB.api('/me?fields=id,name,email', ... 

Tôi tin rằng bạn cũng có thể làm điều đó như thế này:

FB.api('/me', {fields: 'id,name,email'}, ... 

Btw, đảm bảo bạn biết JavaScript không đồng bộ hoạt động như thế nào, bạn đang gọi checkLoginState() ngay trước FB.login, nhưng FB.getLoginStatus không trả lại nội dung nào đó im trung gian và bạn luôn gọi FB.login. Dưới đây là một bài viết về cách sử dụng FB.login và FB.getLoginStatus theo cách thích hợp: http://www.devils-heaven.com/facebook-javascript-sdk-login/

+1

Cảm ơn bạn, nó hoạt động .. – OwnurD

+0

Cảm ơn bạn, vẫn đang làm việc Tháng 10 2016 – Tom

+0

Cảm ơn! Facebook có hàng triệu người dùng, nhưng nhà phát triển của họ không thể khắc phục các vấn đề nguyên thủy! Tôi ghet Facebook. – Webars

Các vấn đề liên quan