2011-10-19 60 views
29

Tôi đang sử dụng API JavaScript để tạo ứng dụng của mình cho Facebook. Vấn đề là, nó quay trở lại
email = undefined.cách nhận id email của người dùng Facebook bằng cách sử dụng javascript sdk

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 đang 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> 

Trả lời

8

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 truy cập

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

và sử dụng fb-api -> user-info ví dụ như là một điểm khởi đầu, sau đó đăng xuất và đăng nhập lại, nó sẽ yêu cầu bạn cho perms email và bạn có thể thấy email của mình đang được in. Nó được thực hiện bằng cách sử dụng response.email như bạn đề cập trong bài viết của bạn.

+0

cảm ơn câu trả lời của bạn, tôi có thêm một truy vấn làm cách nào để nhận id email mà người dùng đã đăng nhập? có các id email khác liên quan đến một cấu hình ... – user958414

+0

bạn phải sử dụng mã thông báo truy cập ứng dụng của mình thay vì người dùng và sau đó sử dụng để truy xuất thông tin bạn cần – TommyBs

0

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 lược đồ xác thực cũ. Bạn nên sử dụng mô tả mới được mô tả tại đây: https://developers.facebook.com/docs/reference/javascript/

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

Khi điều đó được cho là bạn cần đảm bảo bạn có quyền phù hợp để xem email người dùng. Bạn có thể xem các quyền cần thiết tại đây: http://developers.facebook.com/docs/reference/api/user/

Bạn nhận được các quyền đó bằng cách sử dụng chức năng FB.login như mô tả của TommyBs trong câu trả lời khác.

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

12

đây là ví dụ làm thế nào 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> 
6
<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 này để cho phép thêm

để biết thêm chi tiết chuyến thăm: https://www.fbrell.com/examples/

+0

*, {scope: 'email'} *, cứu mạng. Cố gắng nhiều ... chỉ có giải pháp này làm việc cho tôi. – Vikrant

82
// 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); 
    } 
); 
+0

đây là những gì đã giúp tôi – Benjamin

+0

lý do tại sao những kẻ fb giữ fidling xung quanh ....?!?!?! Tx @ masakielastic! Đã đến hàng giờ, tôi tìm thấy câu trả lời của bạn! –

0

Trong mã này tôi đã nhận được dữ liệu người dùng mẫu facebook và lưu trữ vào cơ sở dữ liệu của tôi usin g 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'}); 
Các vấn đề liên quan