The email area does not work, which is used in FB Login

I am trying to use FB Login on my website and should receive user information (email, public_profile, date of birth and location). But after logging in, only the name and facebookId of the user that I received. Codes:

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

Javascript part:

 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 Result:

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

No email or any other information.

+5
source share
1 answer

This is a well-known issue, searching for "Declarative Fields" in the change log: https://developers.facebook.com/docs/apps/changelog#v2_4

For instance:

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

I think you can also do it like this:

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

Btw, make sure you know how asynchronous JavaScript works, you call checkLoginState () right before FB.login, but FB.getLoginStatus does not return something immediately, and you always call FB.login. Here is an article on how to use FB.login and FB.getLoginStatus correctly: http://www.devils-heaven.com/facebook-javascript-sdk-login/

+15
source

All Articles