Получить базовую информацию для пользователей с помощью плагина кнопки входа в facebook?
Здесь я использую плагин Facebook Login и javascript sdk
Я могу успешно войти в систему и выйти из системы, используя выше.
Когда первый пользователь прошел процесс аутентификации, мне нужно сохранить основную информацию пользователя, то есть имя пользователя Facebook, адрес электронной почты в моей базе данных.
Пожалуйста, предложите, как я могу это сделать.
<p><fb:login-button autologoutlink="true"></fb:login-button></p>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function () {
FB.init({ appId: '123456', status: true, cookie: true,
xfbml: true
});
};
(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);
} ());
</script>
Ответы
Ответ 1
Подпишитесь на мероприятие auth.login
. Если вы сделаете это, Facebook вызовет вашего обработчика после входа в систему, как это произошло.
В этом обработчике используйте FB.api
, чтобы вызвать API-интерфейс Graph, чтобы получить любую необходимую информацию. Например, вызов /me
, как показано во втором примере, предоставит вам базовую информацию о зарегистрированном пользователе.
Теперь у вас есть все данные в JavaScript. Чтобы отправить это на свой сервер, выполните простой старый запрос XMLHttpRequest/AJAX. Вероятно, ваша библиотека JavaScript делает это проще - в jQuery это jQuery.ajax() - но в худшем случае вы можете использовать XHR напрямую.
Теперь у вас есть данные на вашем сервере, и вы можете делать все, что хотите, например хранить в базе данных. Если вы хотите сохранить данные только один раз, просто проверьте, что вы еще не сохранили информацию об этом ID пользователя.
Ответ 2
Также возможно использовать комбинацию PHP SDK и JS SDK, причем последняя выполняет регистрацию и предыдущие данные на сервере. Что-то вроде:
<?php
require_once 'config.php';
require_once 'lib/facebook.php';
$facebook = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_APP_SECRET,
));
?>
<!DOCTYPE html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function () {
FB.init({
appId:'<?php echo $facebook->getAppID() ?>',
cookie:true,
xfbml:true,
oauth:true
});
FB.Event.subscribe('auth.login', function (response) {
window.location = "showUser.php"; //redirect to showUser.php on Login
});
FB.Event.subscribe('auth.logout', function (response) {
window.location.reload();
});
};
(function () {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<div class="fb-login-button" data-show-faces="true" data-width="200"
data-max-rows="1"></div>
</body>
</html>
И в showUser.php
у вас есть что-то вроде:
<?php
#showUser.php
require_once 'config.php';
require_once 'lib/facebook.php';
$facebook = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_APP_SECRET,
));
$user = $facebook->getUser();
if($user)
{
if ($user) {
try {
// Proceed knowing you have a logged in user who authenticated.
$user_profile = $facebook->api('/me');
var_dump($user_profile); //You can now save this data
} catch (FacebookApiException $e) {
echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
$user = null;
}
}
}
?>
Ответ 3
В этом решении есть дыра - это означает, что пользователь может составить любую информацию, которую он хочет, и отправить XHR обратно на мой сервер. Серверу необходимо будет напрямую связаться с Facebook.
Ответ 4
//very simple just change this line
fb:login-button autologoutlink="true"
//with this one
fb: login-button autologoutlink = "true" onlogin = 'your_ajax_fun_that_store_in_db()'
function your_ajax_fun_that_store_in_db(){
FB.api('/me', function(response) {
$.post( "ajax/store_user_info.php",response, function( data ) {
//write you js code here !
//you can use the (response) from facebook directly in your store_user_info.php as it will be sent in POST array
});
});
}
//last thing when you face such a problem the first thing to do is to go back to facebook reference of fun.