Обращение к MODx через nodejs

Добрый день.
Изучаю nodejs и возникла необходимость обратиться к MODx — авторизован ли текущий пользователь.
1. Нода и MODx находятся на одном сервере (nginx)
2. Данные об авторизации пользователя нужно получить до загрузки страницы, соответственно нужно это делать на стороне сервера без сокетов.
3. Возможно в этом случае нужно обращаться к кукам?

Если у кого-то есть опыт в этом плане поделитесь, пожалуйста!
Сергей
25 января 2022, 09:06
modx.pro
154
0

Комментарии: 3

Николай Савин
25 января 2022, 11:37
+1
Я бы зашел со стороны токена.
При авторизации юзера куку сохраняю как токен в базе. При выходе — затираю.
Соотвественно если нода имеет доступ к этой куке — достаточно простым запросом проверить есть ли юзер с таким токеном. Если есть — он залогинен. Если нет — значит не залогинен и куку можно зачистить.
    Сергей
    26 января 2022, 21:03
    0
    Николай, спасибо за ответ!

    У меня получилось реализовать следующим образом:
    1. В ноде получаю куку PHPSESSID
    req.headers.cookie
    2. С помощью пакета php-unserialize разбираю данные сессии и получаю user_id
    const PHPUnserialize = require('php-unserialize');
    $dataarr = PHPUnserialize.unserializeSession(data[0].data);
    userid = $dataarr['modx.user.contextTokens']['web']; //или mgr
    3. Если в $dataarr['modx.user.contextTokens'] пусто, то перекидываю на страницу авторизации.
    vectorserver
    14 февраля 2022, 13:57
    1
    0
    Я бы сделал прослушку на nodejs, и повесил бы к примеру на node.localhost:3000 и потом через плагин отправлял бы данные.

    <?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);
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3