Обращение к MODx через nodejs
Добрый день.
Изучаю nodejs и возникла необходимость обратиться к MODx — авторизован ли текущий пользователь.
1. Нода и MODx находятся на одном сервере (nginx)
2. Данные об авторизации пользователя нужно получить до загрузки страницы, соответственно нужно это делать на стороне сервера без сокетов.
3. Возможно в этом случае нужно обращаться к кукам?
Если у кого-то есть опыт в этом плане поделитесь, пожалуйста!
Изучаю nodejs и возникла необходимость обратиться к MODx — авторизован ли текущий пользователь.
1. Нода и MODx находятся на одном сервере (nginx)
2. Данные об авторизации пользователя нужно получить до загрузки страницы, соответственно нужно это делать на стороне сервера без сокетов.
3. Возможно в этом случае нужно обращаться к кукам?
Если у кого-то есть опыт в этом плане поделитесь, пожалуйста!
Комментарии: 3
Я бы зашел со стороны токена.
При авторизации юзера куку сохраняю как токен в базе. При выходе — затираю.
Соотвественно если нода имеет доступ к этой куке — достаточно простым запросом проверить есть ли юзер с таким токеном. Если есть — он залогинен. Если нет — значит не залогинен и куку можно зачистить.
При авторизации юзера куку сохраняю как токен в базе. При выходе — затираю.
Соотвественно если нода имеет доступ к этой куке — достаточно простым запросом проверить есть ли юзер с таким токеном. Если есть — он залогинен. Если нет — значит не залогинен и куку можно зачистить.
Николай, спасибо за ответ!
У меня получилось реализовать следующим образом:
1. В ноде получаю куку PHPSESSID
У меня получилось реализовать следующим образом:
1. В ноде получаю куку PHPSESSID
req.headers.cookie
2. С помощью пакета php-unserialize разбираю данные сессии и получаю user_idconst PHPUnserialize = require('php-unserialize');
$dataarr = PHPUnserialize.unserializeSession(data[0].data);
userid = $dataarr['modx.user.contextTokens']['web']; //или mgr
3. Если в $dataarr['modx.user.contextTokens'] пусто, то перекидываю на страницу авторизации.
Я бы сделал прослушку на nodejs, и повесил бы к примеру на node.localhost:3000 и потом через плагин отправлял бы данные.
NodeJS
<?php
$eventName = $modx->event->name;
switch($eventName) {
case 'OnWebLogin':
// хук на вход http://node.localhost:3000/?userID=1&login=1
break;
case 'OnWebLogout':
// хук на выход http://node.localhost:3000/?userID=1&logout=1
break;
}
NodeJS
const http = require("http");
http.createServer(function(request, response){
console.log("Url: " + request.url);
console.log("Тип запроса: " + request.method);
console.log("User-Agent: " + request.headers["user-agent"]);
console.log("Все заголовки");
console.log(request.headers);
response.end();
}).listen('node.localhost',3000);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.