Определить пользователя ajax запроса

Всем добрый вечер! Как в частности на modx можно реализовать определить в скрипте к которому обращаемся ajax запросом id пользователя. Я делал так, выводил скрытое поле с id пользователем и хэшом этого id (от подменны id) передавал их и сверял на стороне сервера, но подозреваю, что это не совсем правильно, и можно реализовать через sessin_id. В БД для пользователя пишится его sessin_id, т.е. теоретически можно использовать его, передавать через ajax (насколько это правильно?). Но тут есть загвоздка, если пользователь зашел в лк через несколько браузеров sessin_id у него будет разный, а в базе один. Как вообще такие вещи делаются? Если можно подоходчивей......)) В модх есть токен, но как реализовать и использовать не совсем понимаю… просветите как грамотно делаю?
Владимир Бабусенко
12 июля 2016, 18:42
modx.pro
1 446
0

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

Марат Марабар
12 июля 2016, 21:57
+1
Если пользователь авторизован, то его айди уже хранится в сессии
return $_SESSION['modx.user.contextTokens']['web'];
    Владимир Бабусенко
    12 июля 2016, 22:14
    -1
    B и что это дает? Речь идет про ajax… Каким образом можно воспрепятствовать нерадивому пользователю (допустим у него id=5) у которого в ЛК есть форма изменить ИМЯ. Соответственно мы должны вывести скрытое поле c id=5, значение которое передадим. Менятся будет ajax-ом. Соответственно мы должны передать в скрипт новое ИМЯ и id=5 пользователя. А скрипт уже изменит в БД у пользователя с id=5 ИМЯ на новое. НО что мешает пользователю, открыть панель разработчика увидеть это скрытое поле и поменять значение на допустим 6, соответсвенно ИМЯ изменится у пользователя в базе с id=6.
      Марат Марабар
      12 июля 2016, 22:45
      +1
      Как что даёт?
      Ну вот смотри



        Сергей Шлоков
        13 июля 2016, 07:27
        +1
        Не нужно никаких скрытых полей. MODX умеет определять текущего пользователя. При инициализации он ищет куку PHPSESSID с именем сессии. Находит эту сессию в таблице сессий. В ней находит пользователя и сохраняет его в $modx->user. Так что просто запрашиваем $modx->user->id в ajax скрипте и сохраняем данные для текущего пользователя.
      Василий Наумкин
      12 июля 2016, 22:42
      +2
      Авторизованный юзер всегда здесь:
      $modx->user
      Id его можно получить так
      $modx->user->id
        Владимир Бабусенко
        12 июля 2016, 23:04
        0
        Хм… вы меня смутили. Когда то давно я так пытался получить id в обработчике, но получать в стороннем php файле (обработчике ajax запроса), не сниппете! не удавалось(вроде 0 возвращал всегда или ошибку, сейчас не вспомню). Естественно в файле я подключал modx. Поэтому я подумал что обработчик не знает какой пользователь инициировал его выполнение, и забил на это, стал передавать id пользователя и хэш id… Завтра проверю ваши утверждения, неужели я так жестоко ошибался… и обработчик знает id пользователя......(((
          Владимир Бабусенко
          12 июля 2016, 23:50
          0
          В общем попробовал, в обработчике id пользователя не получить… возвращает 0. Есть файл обработчик test.php
          <?php
          define('MODX_API_MODE', true);
          // Full path to the index
          require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
          $modx = new modX();
          $modx->initialize('mgr');
          
          echo $modx->user->id;
          кнопка в личном кабинете и запрос к обработчику…
          $(document).on("click", ".test", function(){
                  $.post('/assets/components/azstemplate/ajax/test.php', {  }, function(success) {
          
                  });
              });
          Что не так?
            Марат Марабар
            13 июля 2016, 00:58
            +1
            <?php
            define('MODX_API_MODE', true);
            // Full path to the index
            require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
            //$modx = new modX();
            $modx->initialize('mgr');
            
            echo $modx->user->id;
            А так?
              Василий Наумкин
              13 июля 2016, 05:15
              +1
              Что не так?
              Лишнего много. Зачем ты повторно инициализируешь $modx, если он уже запускается в index.php? Зачем инициализируешь контекст mgr — у тебя что, юзер с фронтенда в админке авторизован?

              Всё гораздо проще:
              <?php
              define('MODX_API_MODE', true);
              require 'index.php';
              
              echo $modx->user->id;


            Владимир Бабусенко
            13 июля 2016, 07:35
            +1
            Ребята, всем спасибо… то что нужно, все заработало. Можно как к сессии обратится, можно так же и и к объекту user, что по мне понятней и удобней… Всем плюсы к карме.......))
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              10