PHP + Mysql + Docker + Facebook Login скачать сайт без регистрации и СМС

Для «игрового» проекта выращивания стажеров мною был создан репозиторий открытый кода, очень простой и очень наглядный пример как мы будем наворачивать функциональность от «базовый базовый» яваскрипт и php, до чуть более чем продвинутой версии. На данный момент — номер коммита «для статьи» — Вы можете скачать, запустить (по инструкции в корне проекта) и получить готовый работающий минисайтик с логином пользователя через Facebook и сохранением его данных в базу. Прелесть контейнеров — что можно не только собирать (как первый для примера собирается, но и запускать чужие без сборки).


Как все работает

В «первом» index.php файле подключаются все библиотеки и выводится основной шаблон, куда мы включаем простейший вывод «залогинен» ли пользователь. Строго говоря — так делать не стоит и код разделять лучше, но это после с усложнением. Итак — есть шаблон и проверка сессии. И есть мегакрутой яваскрипт, где мы используем библиотеку Facebook для генерации запроса на логин.

navbar_login = function () {
	FB.login(function (response) {
		if (response.authResponse) {
			$('#navbar_login_block a').addClass('btn-info');
			$.ajax({
				type: 'POST',
				url: '/login/fb_callback.php',
				dataType: 'json',
				success: function (data) {
					$('#navbar_login_block a').removeClass('btn-info');
					if (typeof(data.error) != 'undefined') {
						alert(data.error);
					} else {
						$('#navbar_login_block').hide();
						$('#navbar_logout_block').show();
						$('#navbar_logout_block img').attr('src', data.picture);
						$('#navbar_logout_block span').html(data.name);
					}
				}
			});
		} else {
			alert('Что-то пошло не так - попробуйте еще раз.');
		}
	}, {scope: 'email,public_profile'});
	return false;
};

Опять строго говоря некрасиво — но мы и это изменим потом, пока что нам важно — что мы не просто логин делаем, а вызываем и нашу внутреннюю функцию «сохранения» данных — /login/fb_callback.php

Сохранение данных от Facebook — это по сути взятие по токену (полученному при логине) актуальных данных, т.е. мы не никогда не верим ничему переданному пользователем, а получаем какбы «адрес» его страницы в соцсети и, если ответом на запрос к соцсети будет «да все верно», сохраняем ее данные. Мы для этого даже composer подключили (а класс базы пока свой ага))))

require_once __DIR__ . '/../vendor/autoload.php';
...
$fb = new Facebook\Facebook([
	'app_id' => FB_APP_ID,
	'app_secret' => FB_APP_SECRET,
	'default_graph_version' => 'v2.8'
]);
...

И сохраняем и в базу, и в сессию, и красиво выводим. При выходе — просто у себя закрываем сессию — т.е. сообщать в Facebook нам незачем, а себе можем и пометить все что нужно (если захотим видеть актуальные данные по сеансам активным пользователей), и не помечать

Оставить комментарий

XHTML: Вы можете использовать такие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">