tra-loi-cau-hoi-phat-trien-web.com

cách nhận id email của người dùng Facebook bằng cách sử dụng sdk javascript

Tôi đang sử dụng API JavaScript để tạo ứng dụng của mình cho Facebook. Vấn đề là, nó trở lại
email = undefined

Tôi không biết tại sao? Và nếu tôi sử dụng nút đăng nhập/đăng xuất Facebook trên ứng dụng của mình thì cảnh báo sẽ hiển thị id email chính xác của người dùng nhưng tôi không muốn làm điều đó . Tôi còn thiếu gì? 

Đây là mã của tôi: 

<p><fb:login-button autologoutlink="true" perms="user_about_me,email"></fb:login-button></p>

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

  FB.getLoginStatus(function (response) {
    if (response.session) {
      greet();
    }
  });
};
(function () {
  var e = document.createElement('script');
  e.type = 'text/javascript';
  e.src = document.location.protocol +
  '//connect.facebook.net/en_US/all.js';
  e.async = true;
  document.getElementById('fb-root').appendChild(e);
} ());

function greet() {
  FB.api('/me', function (response) {
  alert('Welcome, ' + response.name + "!");
  alert('Your email id is : '+ response.email);
});
}
</script>
31
user958414

Theo thông tin mới nhất trên trang facebook, bạn nên sử dụng 'phạm vi' thay vì perms. https://developers.facebook.com/docs/reference/javascript/FB.login/

Nếu bạn đến thăm 

https://developers.facebook.com/tools/console/

và sử dụng ví dụ fb-api -> thông tin người dùng làm điểm bắt đầu, sau đó đăng xuất và đăng nhập lại, nó sẽ yêu cầu bạn cho phép email và bạn có thể thấy email của mình được in. Nó được thực hiện bằng cách sử dụng answer.email như bạn đề cập trong bài viết của mình.

9
TommyBs
// https://developers.facebook.com/docs/javascript/reference/FB.api/
// v2.4

FB.api('/me', { locale: 'en_US', fields: 'name, email' },
  function(response) {
    console.log(response.email);
  }
);
93
masakielastic

đây là ví dụ về cách tôi lấy tên người dùng và e-mail:

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>

<script>
  $(function() {
    FB.init({
      appId  : 'APP_ID',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });

    FB.getLoginStatus(function(response) {
      if (response.status == 'connected') {
        getCurrentUserInfo(response)
      } else {
        FB.login(function(response) {
          if (response.authResponse){
            getCurrentUserInfo(response)
          } else {
            console.log('Auth cancelled.')
          }
        }, { scope: 'email' });
      }
    });

    function getCurrentUserInfo() {
      FB.api('/me', function(userInfo) {
        console.log(userInfo.name + ': ' + userInfo.email);
      });
    }
  });
</script>
13
Mantas Vaitkūnas
<button id="fb-login">Login & Permissions</button>

<script>
document.getElementById('fb-login').onclick = function() {
  var cb = function(response) {
    Log.info('FB.login callback', response);
    if (response.status === 'connected') {
      Log.info('User logged in');
    } else {
      Log.info('User is logged out');
    }
  };
  FB.login(cb, { scope: 'email' });
};
</script>

Sử dụng điều này để cho phép thêm 

để biết thêm chi tiết, hãy truy cập: https://www.fbrell.com/examples/

8
Ram Balwad

Trong mã này, tôi đã lấy dữ liệu người dùng từ facebook và lưu trữ vào cơ sở dữ liệu của mình bằng ajax 

 FB.login(function(response) {
          if (response.authResponse) {
         FB.api('/me?fields=email,name,first_name,last_name', function(response) 
         {
             FB.api(
             "/"+response.id+"/picture?height=100",
                                    function (responses) {
                                        //console.log(responses.data.url)
                                                    response['profile_pic']=responses.data.url;
                                        $.ajax({
                                                   type:"POST",
                                                   url:'<?php echo base_url(); ?>'+'home/facebook_get_signup',
                                                   data:response,
                                                   success:function(res)
                                                   {
                                                       if(res=='success')
                                                       {

                                                           window.location='<?php echo base_url(); ?>';
                                                       }
                                                       if(res=='exists')
                                                       {
                                                           window.location='<?php echo base_url(); ?>';  
                                                       }
                                                   }
                                               });

                                    }
                                )
         });
        } else {
         console.log('User cancelled login or did not fully authorize.');
        } 
      // handle the response
        }, {scope: 'email,user_likes'});
1
Dipak Kolhe

Có một vài điều sai với giải pháp của bạn. Trước hết bạn đang sử dụng sơ đồ xác thực cũ. Bạn nên sử dụng cái mới được mô tả ở đây: https://developers.facebook.com/docs/reference/javascript/

Bạn cần thêm oauth: true vào hàm init của bạn và đảm bảo rằng getLoginStatus của bạn tìm loại phản hồi mới.

Khi điều đó được nói, bạn cần đảm bảo rằng bạn có quyền để xem e-mail của người dùng. Bạn có thể xem các quyền cần thiết ở đây: http://developers.facebook.com/docs/reference/api/user/

Bạn nhận được những thứ đó bằng cách sử dụng hàm FB.login như được mô tả bởi TommyBs trong một câu trả lời khác. 

Khi bạn có các tùy chọn đó, bạn có thể sử dụng chức năng FB.api để nhận e-mail.

0
Kasper Vesth