Для «игрового» проекта выращивания стажеров мною был создан репозиторий открытый кода, очень простой и очень наглядный пример как мы будем наворачивать функциональность от «базовый базовый» яваскрипт и php, до чуть более чем продвинутой версии. На данный момент — номер коммита «для статьи» — Вы можете скачать, запустить (по инструкции в корне проекта) и получить готовый работающий минисайтик с логином пользователя через Facebook и сохранением его данных в базу. Прелесть контейнеров — что можно не только собирать (как первый для примера собирается, но и запускать чужие без сборки).
Как все работает
В «первом» index.php файле подключаются все библиотеки и выводится основной шаблон, куда мы включаем простейший вывод «залогинен» ли пользователь. Строго говоря — так делать не стоит и код разделять лучше, но это после с усложнением. Итак — есть шаблон и проверка сессии. И есть мегакрутой яваскрипт, где мы используем библиотеку Facebook для генерации запроса на логин.
Опять строго говоря некрасиво — но мы и это изменим потом, пока что нам важно — что мы не просто логин делаем, а вызываем и нашу внутреннюю функцию «сохранения» данных — /login/fb_callback.php
Сохранение данных от Facebook — это по сути взятие по токену (полученному при логине) актуальных данных, т.е. мы не никогда не верим ничему переданному пользователем, а получаем какбы «адрес» его страницы в соцсети и, если ответом на запрос к соцсети будет «да все верно», сохраняем ее данные. Мы для этого даже composer подключили (а класс базы пока свой ага))))
И сохраняем и в базу, и в сессию, и красиво выводим. При выходе — просто у себя закрываем сессию — т.е. сообщать в Facebook нам незачем, а себе можем и пометить все что нужно (если захотим видеть актуальные данные по сеансам активным пользователей), и не помечать
good