Регистрация/авторизация

Опубликовано: 29 Июн 2015

Для modx revo существует отличный пакет регистрация/авторизация  - Login. Отличный, но очень громоздкий, включает в себя десяток сниппетов, тучу чанков и т.д. т.п. Для сайтов, где нужен личный кабинет , восстановление пароля и прочие плюшки, он идеальный, но мне нужно было решение проще и полегче, чтоб не тащить за собой столь мощный инструмент. Погуглив и почитав имеющие варианты, взяла по чуть-чуть от каждого.

Суть в следующем, как форму регистрации мы используем сниппет Formit к которому пишем хук, где и происходит сама регистрация. Форма имеет 3 поля Имя, логин (email) и пароль. Когда пользователь вводит данные, которые совпадает с  теме, что есть в системе, он авторизуется, если пароль неправильный, показывается это, если данные отсутствуют пользователь автоматически регистрируется и авторизируется.

Чанк form

[ [!FormIt?
&hooks=`register`
]]
<form id="registrForm" method="post" action="[ [~[ [*id]]]]">
<h4 style="width: 100px;" id="home-register-head">Регистрация на сайте</h4>
 <div id="wpk_reg_form">
        <input type="text" placeholder="Имя" name="fullname" id="fullname" value=""/>
        <input type="text" placeholder="Логин (email)" name="email" id="email" value="" required/>
        <input type="text" placeholder="Пароль" name="password" id="password" value=""/>
        </br>
        <input type="submit" id="submit-button" name="submit" value="Ok"/>
    </div>
  </form>  

Сниппет register

<?php
//Если пользователь залогинен выходим
if($modx->getLoginUserName() != null) return;
  function refresh($url=NULL)
    {
       if(empty($url))
       {
          $url=$_SERVER['REQUEST_URI'];
       };
       header("Location: ".$url);
       exit();
    }
//получаем данные формы
    $username = $hook->getValue('email'); //у меня user = email
$password = $hook->getValue('password');
$email = $hook->getValue('email');
$fullname = $hook->getValue('fullname');

//проверяем  есть ли такой пользователь в базе
$count = $modx->getCount('modUser', array('username' => $username));
if($count > 0) {
   $logindata = array(
      'username' => $username,
      'password' => $password,
      'rememberme' => true
    );
    // сам процесс авторизации
    $response = $modx->runProcessor('/security/login', $logindata);
    // проверяем, успешно ли
    if ($response->isError()) {
      // произошла ошибка
      $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка авторизации в $register. Message: '.$response->getMessage());
    }   
       refresh();
return;
}  // пользователь с таким именем есть - выходим
    // создаем пользователя и сохраняем
    $user = $modx->newObject('modUser');
    $user->set('username', $username);
    $user->set('password', $password);
    $user->save();
    // создаем профиль, добавляем к пользователю и сохраняем
    $profile = $modx->newObject('modUserProfile');
    $profile->set('email',    $email);
    $profile->set('fullname', $fullname);
    $profile->set('phone',    $phone);
    $user->addOne($profile);
    $profile->save();
    $user->save();
    //Авторизуем пользователя
    $logindata = array(
      'username' => $username,
      'password' => $password,
      'rememberme' => true
    );
    // сам процесс авторизации
    $response = $modx->runProcessor('/security/login', $logindata);
    // проверяем, успешно ли
    if ($response->isError()) {
      // произошла ошибка
      $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка авторизации в $register-on-order. Message: '.$response->getMessage());
    }
        refresh();
return true;

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: