We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12736
    • 259 Posts
    Организую на сайте регистрацию/авторизацию. Решил использовать WebLogin + WebSignup. И все вроде хорошо. Пользователи добавляются, поля в формах проверяются... Но заметил следующую штуку. Если я с фронтэнда делаю неудачную автоизацию (ввожу специально не верный пароль или имя) - то админка разлогинивается и в админке по новой приходится авторизовыватья. Если авторизация (с фронтэнда) корректная - то разлогинивание админки не происходит. Ну я что-то пока не могу ни как въехать, то есть понимаю, что это дело происходит из-за того что я с одного компьютера логинюсь и с фронтэнда и с бекэнда, но сам механизм не понимаю?
      • 33694
      • 742 Posts
      Наверное при неудачном входе чистятся куки, ну или сессия прибивается.
        • 12736
        • 259 Posts
        да в том то и дело что вроде нет. вот этот кусок кода в weblogin.processor.inc.php

        $sql = "SELECT $dbase.`".$table_prefix."web_users`.*, $dbase.`".$table_prefix."web_user_attributes`.* FROM $dbase.`".$table_prefix."web_users`, $dbase.`".$table_prefix."web_user_attributes` WHERE BINARY $dbase.`".$table_prefix."web_users`.username = '".$username."' and $dbase.`".$table_prefix."web_user_attributes`.internalKey=$dbase.`".$table_prefix."web_users`.id;";
            $ds = $modx->db->query($sql);
            $limit = $modx->db->getRecordCount($ds);
        
            if($limit==0 || $limit>1) {
                $output = webLoginAlert("Имя или пароль указаны неправильно!");
                return;
            }
        


        Сессия не прерывется, куки не чистятся.
        Другие ошибки, те которые блокируют аккаунт  они действительно прерывают сессию с ними все так и должно быть.
          • 12736
          • 259 Posts
          Так то по правде сказать, я ни как не могу понять как реализуется механиз авторизации у MODx. Понятно что если просто использовать Weblogin и WebSign то можно и не париться. Но я например хочу чтоб непосредственно сразу после регистрации человек авторизировался и попадал в свой Личный Кабинет. Ясно что надо добавить в websignup.inc.php код который бы авторизировал этого пользователя сразу после регистрации. Можно конечно просто скопипастить туда кусок ответственный за авторизацию из weblogin.processor.inc.php. Ну как-то охота понимать что ты делаешь, а я никак не могу разобраться, что делается чтоб произошла авторизация? Ведь сессия у MODx создается сразу, значит что-то записывется в нее? Должн ведь по идее быть класс с помощью которого происходит авторизация, ну или функция - а я ни чего такого найти не могу. Буду очень благодарен если кто-нить поможет ссылочкой или словом. Спасибо
            • 12736
            • 259 Posts
            Ну вроде я разобрался. Поправте меня, если я ошибаюсь. Нет ничего у MODx в ядре для авторизации веб-пользователей. Все это дело полностью организуется сниппетом. Стандартно это Weblogin - файл: assets/snippets/weblogin/weblogin.processor.inc.php Мне представлялось, что должна существовать какая-то общая функция для автоизации менеджеров и пользователей, но это не так. Потому в weblogin.processor.inc.php вызываются события OnBeforeWebLogin, OnWebAuthentication, OnWebLogin, хотя в Wiki API:invokeEvent http://wiki.modxcms.com/index.php/API:invokeEvent и не рекомендуется использовать эту функцию в сниппетах. И лог о том что кто-то авторизировался пишется тоже weblogin.processor.inc.php .
            Для самой автоизации минимально достаточно
            1)поместить в сессию:
            $_SESSION['webShortname']=$username;
            $_SESSION['webFullname']=$fullname;
            $_SESSION['webEmail']=$email;
            $_SESSION['webValidated']=1;
            $_SESSION['webInternalKey']=$internalKey;
            $_SESSION['webValid']=base64_encode($givenPassword);
            $_SESSION['webUser']=base64_encode($username);
            $_SESSION['webFailedlogins']=$failedlogins;
            $_SESSION['webLastlogin']=$lastlogin;
            $_SESSION['webnrlogins']=$nrlogins;
            $_SESSION['webUserGroupNames'] = '';
             


            2) найти группу документов которые доступны пользователю

            3) обновить значения таблицы web_user_attributes и таблицы active_users

            Вывод тот, что если придется писать что-то свое по авторизации веб-пользователей, то надо, наверно, не забыть вызвать в своем коде события ну и не забыть про лог. Всё wink