Авторизация на сервере PHP с помощью VueJS
Доброго всем времени суток.
Немного удалюсь от самого вопроса, чтобы было более понятно. У меня имеется модульный самописный PHP фреймворк на базе которого построено несколько сложных CRM и более простых сайтов визиток, который отлично умеет работать с API (get, post, put запросы и т.д).
Что на данный момент мне необходимо? Я хочу подружить backend с VueJS, а именно создать SPA приложение используя бекенд своего фреймворка, и если речь идет о простых задачах, к примеру вытащить текст (пусть это будет запись блога) из базы данных и вывести её через Vue на определенной странице, то в этом не возникает проблемы, собственно как и в построении всей остальной логики сайта, но проблема возникает лишь в одном - авторизация и разделение по группам (авторизированный пользователь, гость, администратор и т.д). Я не понимаю способов авторизации (сервер backend и сайт на Vue на одном сервере / железе / IP). Как можно реализовать авторизацию на PHP/VueJS, чтобы можно было динамически менять контент? То есть, самый простой пример - у нас есть две кнопки "вход / регистрация", после входа PHP сервер должен отдавать определенный контент, скажем те же записи блога на главной странице. На стороне backen есть три способа передачи данных (отправка запроса от сервера к серверу, отправка данных запроса по ключу и отправка данных авторизированным по сессии пользователям). Я слышал и много читал про JWT, но так и не понял как работать с токенами. Я был бы очень благодарен за простой пример на PHP + Vue, либо за детальное разъяснение, заранее спасибо.
P.S - в Laravel существует похожая связка Vue + PHP, но в самом принципе работы я так и не разобрался.
Ответы (2 шт):
Легко PHP и Vue подружить! В качестве сервера можешь использоваться open server там mysql, php уже есть. И дальше отправляешь запросы на api php и на php принимаешь ответ. С начало его нужно распаковать
$data = file_get_contents('php://input');
$input = json_decode($data, TRUE);
и дальше работаешь с бд и отправляешь назад ответ в vue. Ты можешь посмотреть пример моих работ ниже:
С форм входа/регистрации на VueJS отправляете на бакэнд данные (email, логин, пароль и прочее). Затем проводите валидацию данных и проверку на соответствие данным в вашей бд. Если пользователя нет, создаете и помечаете, что это обычный пользователь. Например, делаете обычную колонку group_id (1 пользователь, 2 админ) или role (admin, user).
Список групп можно для удобства хранить в какой-нибудь отдельной таблице (user_role: id, name, role и т.п.) и сделать управление ими через админку (смотреть в сторону ACL/RBAC). Затем если пользователь при входе указал верные email/пароль, авторизуете его, записывая сессию. Для хранения пароля используйте методы хеширования, например bcrypt. Для защиты конкретных маршрутов используйте middleware, где проверяйте, что пользователь состоит в конкретной группе и может получать данные.
Если для этих целей используете jwt, создаете пользователю аккаунт, проверяете введенные им при входе данные. Если все правильно, то возвращаете токен. Затем используете токен для аутентификации в последующих запросах пользователя, сам токен храните в cookie.
В качестве готовых примеров, можно взять как раз тот же Laravel (там все это есть из коробки, кроме групп, но это через дополнительные пакеты) или Symfony (немного сложней).