2016-02-25 2 views
0

Код ниже - это «Вход в систему для веб-сайта с помощью JavaScript SDK», который отправит адрес электронной почты и имя браузера на клиентский javascript.
Но как я могу получить адрес электронной почты и имя POSted для файла PHP на моем сервере веб-сайта, так что я могу зарегистрировать пользователя с помощью PHP?Facebook Javascript SDK Login - POST Response to PHP

function statusChangeCallback(response) { 
    if (response.status === 'connected') { 
     testAPI(); 
    } else if (response.status === 'not_authorized') { 
     document.getElementById('status').innerHTML = 'Please log ' + 'into this app.'; 
    } else { 
     document.getElementById('status').innerHTML = 'Please log ' + 'into Facebook.'; 
    } 
} 
function checkLoginState() { 
    FB.getLoginStatus(function(response){ 
     statusChangeCallback(response); 
    }); 
} 
function testAPI() { 
     FB.api('/me', {fields: 'email,name'},function(response) { 
      document.getElementById('status').innerHTML = 'Thanks for logging in again, ' + JSON.stringify(response) + '!<br/><img src="https://graph.facebook.com/'+response.id+'/picture?width=300" />'; 
    }); 
} 
$(document).ready(function() { 
    $.ajaxSetup({ cache: true }); 
    $.getScript('//connect.facebook.net/en_US/sdk.js', function(){ 
     FB.init({ 
      appId: '211867502496511', 
      cookie: true, // enable cookies to allow the server to access the session 
      xfbml: true, // parse social plugins on this page 
      version: 'v2.5' // or v2.0, v2.1, v2.2, v2.3 
     }); 
     FB.getLoginStatus(function(response) { 
      statusChangeCallback(response); 
     }); 
    }); 
}); 
function doalog(){ 
    FB.login(function(response){ 
     statusChangeCallback(response); 
    }); 
} 

ответ

0

Вы можете использовать рабочую лошадку ручных сетей в стороне клиента JavaScript: XMLHttpRequest.

В основном это объект, который позволяет вам вручную обмениваться данными с вашим сервером. Вы можете использовать его вместе с объектом FormData, чтобы POST-данные делали ваш сервер. Отправляемый вами запрос можно обрабатывать, как любой другой запрос POST формы.

Как только у вас есть адрес электронной почты и имя, вы можете это сделать.

var name = theMethodYouUseToGetTheName(); 
var email = theMethodYouUseToGetTheEmail(); 

var request = new XMLHttpRequest(); 
request.onReadyStateChanged = function() { 
    if (request.readyState == 4) { 
     if (request.status == 200) { 
      // your request has been sent and you might have a response 
     } else { 
      // there has been an error 
     } 
    } 
} 

var formData = new FormData(); 
formData.append("name", name); 
formData.append("email", email); 

request.open("POST", "http://yourwebsite.com/your/php/file.php", true); 
request.send(formData); 

Затем на сервере вы можете получить доступ к данным POST как обычно с помощью

$userName = $_POST["name"]; 
$userEmail = $_POST["email"]; 
+0

Да, но это позволит хакеру войти под любым именем он разыскивал угон JavaScript. Он мог войти под своим именем, но затем переслать javascript под другой – user2790911

+0

@ user2790911 Если я не ошибаюсь, API Facebook предоставляет больше информации, чем просто имя и адрес электронной почты, включая уникальный идентификатор. Независимо от того, что вы делаете на своей веб-странице **, у вас будет конечная точка, которая принимает эти запросы **, поэтому, если хакер действительно хотел, чтобы он просто мог отправить запрос из своей собственной программы. Я рекомендую вам прочитать раздел [Практические рекомендации API Facebook] (https://developers.facebook.com/docs/facebook-login/best-practices). Использование XMLHttpRequest не нарушает их. –

+0

Если аутентификация происходит от Facebook до сервера веб-сайта через клиента, клиент может перехватить сообщение и изменить его. Если Facebook отправит сообщение прямо на сервер, сказав, что они проверили подлинность [email protected], и безопасно зарегистрировать его, тогда хакер не сможет перехватить сообщение. – user2790911