Как сделать авторизацию в чате node.js + socket.io на сайте, использующем PHP?
Есть сайт на php, к которому я хочу приделать чат, как самый оптимальный вариант я выбрал чат с использованием сокетов(node.js + socket.io), вроде бы все сделал, но не знаю, как реализовать авторизацию пользователей в этом чате используя данные учетной записи из php и базы данных.
1) запрашивать из ноды скрипт на php, который будет говорить, авторизован ли пользователь. (лёгкий способ)
2) хранить в общей базе данных сессии (токен сессии), так что из ноды легко узнать, авторизован ли пользователь (хороший способ)
3) Реализовать в ноде тот же способ авторизации, что и в php. (плохой способ - придётся повторно запрашивать пароль для входа в чат)
4) использовать Redis PubSub для обмена информацией между php и node. (плохой способ - в php придётся постоянно запрашивать данные, нет ли в канале нового запроса)
что такое токен авторизации знаете? что-то типа sessionid. Он хранится в сессии, сессия хранится в бд (как говорил @Dimitriys) или просто инфа о токенах дублируется в базу. Этот же токен знает клиентский js и передаёт через websocket в ноду. Остаётся только проверить, присутствует ли принятый от клиента токен в базе, или нет.
Можно помудрить с сессиями на PHP. Перенести хранение сессий с файлов на mongodb. Тогда и нода и рнр будут работать с общими переменными сессий.
Либо тупо при авторизации из РНР в базу писать рандомный auth_key, и сохранять его в куки.
А в ноде получать куку auth_key и искать ее в базе пользователей и например сверять IP входа.
А я бы проверял авторизацию сугубо на стороне PHP, например.
И использовал бы node.js с модулем socket.oi, именно для сигналер-сервера мгновенных сообщений/уведомлений в чате.