Skip to content
  1. Компоненты
  2. SendIt
  3. Идентификация

Идентификация

Идентификация пользователя, как и редактирование его данных, также предполагает отправку данных на сервер. Вот это неожиданность!🙃 А значит SendIt справится и с этим. Есть, конечно, нюанс: непосредственно для работы с пользователем используется отдельный класс identification.class.php, который подключается в хуке Identification, но он уже проверен в бою, так как взят из моего же компонента AjaxFormitLogin (устарел). В базовом варианте идентификация пользователей работает аналогично компоненту Login.

Регистрация

Ниже приведены варианты пресетов для организации регистрации на сайте.

  • register - базовый пресет, без модерации, необходимости подтверждать почту и без автоматической авторизации.
  • register_with_moderate - пресет с модерацией, но без необходимости подтверждать почту.
  • register_with_activation - пресет с необходимостью подтверждать почту.
  • register_with_autologin - пресет с автоматической авторизацией.
Форма
html
<form data-si-form="regForm" data-si-preset="register">
    <label>
        <input type="text" name="fullname" placeholder="Полное имя">
        <p data-si-error="fullname"></p>
    </label>
    <label>
        <input type="email" name="email" placeholder="Email">
        <p data-si-error="email"></p>
    </label>
    <label>
        <input type="password" name="password" placeholder="Введите пароль">
        <p data-si-error="password"></p>
    </label>   
    <label>
        <input type="password" name="password_confirm" placeholder="Подтврдите пароль">
        <p data-si-error="password_confirm"></p>
    </label>     
    <label>
        <input type="checkbox" name="politics">
        Я на всё согласен!
    </label>
    <button type="submit">Отправить</button>
</form>
Пресет
php
'register' => [
    'method' => 'register',              
    'hooks' => 'Identification',
        
    'validate' => 'email:required,password:checkPassLength=^8^,password_confirm:passwordConfirm=^password^,politics:checkbox:required',
    'politics.vTextRequired' => 'Примите наши условия.',
    'password.vTextRequired' => 'Придумайте пароль.',
    'password.vTextCheckPassLength' => 'Пароль должен быть не менее 8 символов.',   

    'fiarSubject' => 'Активация пользователя',
    'fiarFrom' => 'email@domain.ru',
    'fiarTpl' => '@FILE chunks/emails/activateEmail.tpl',    
        
    'usergroups' => 2,
    'usergroupsField' => '',
    'passwordField' => '',
    'usernameField' => 'email',  
],
'register_with_moderate' => [
    'extends' => 'register',    
    'successMessage' => 'Вы успешно зарегистрированы. Дождидесь завершения модерации.',
    'moderate' => 1,
    'activation' => 0,      
], 
'register_with_autologin' => [
    'extends' => 'register',   
    'successMessage' => 'Вы успешно зарегистрированы и будете перенаправлены в личный кабинет.',
    'redirectTo' => 5,
    'redirectTimeout' => 3000 
    
    'moderate' => 0,
    'autoLogin' => 1,
    'rememberme' => 1,
    'authenticateContexts' => '',
]      
'register_with_activation' => [
    'extends' => 'register_with_autologin',
    'hooks' => 'Identification,FormItAutoResponder',
    'successMessage' => 'Вы успешно зарегистрированы. Подтвердите email для активации учётной записи.', 
    
    'redirectTo' => 0,    
      
    'activation' => 1,
    'activationResourceId' => 1,
    'activationUrlTime' => 10800,     
    'afterLoginRedirectId' => 5,          
],
  • method: метод, который будет вызван в хуке Identification.
  • usergroups: список групп, в которые нужно добавить пользователя, разделенных запятыми.
  • usergroupsField: имя поля выбора группы.
  • passwordField: имя поля ввода пароля.
  • usernameField: имя поля ввода username.
  • moderate: 1 - требуется модерация и ручная разблокировка пользователя.
  • activation: 1 - требуется активация путем перехода по ссылке из письма, 0 - пользователь будет активирован сразу после регистрации.
  • redirectTo: ID ресурса или ссылка на страницу для переадресации.
  • redirectTimeout: задержка в милисекундах перед переадресацией.
  • autoLogin: 1 - пользователь будет авторизован сразу после регистрации, при условии, что не требуется модерация.
  • rememberme: позволяет запомнить авторизованного пользователя на данном устройстве.
  • authenticateContexts: список дополнительных контекстов для авторизации, разделенных запятыми.
  • activationResourceId: ID ресурса, где будет вызван сниппет ActivateUser.
  • activationUrlTime: время жизни ссылки для активации в милисекундах.
  • afterLoginRedirectId: ID ресурса или ссылка на страницу для переадресации после успешной активации учётной записи.
  • остальные параметры ищите в документации компонента FormIt.

Подсказка

Если пароль не указан - он будет сгенерирован автоматически и отправлен на почту пользователю.

Авторизация

Форма
html
<form data-si-form="authForm" data-si-preset="auth">
    <input type="hidden" name="errorLogin">
    <label>
        <input type="email" name="email" placeholder="Email">
        <p data-si-error="email"></p>
    </label>
    <label>
        <input type="password" name="password" placeholder="Введите пароль">
        <p data-si-error="password"></p>
    </label>     
    <button type="submit">Отправить</button>
</form>
Пресет
php
    'auth' => [
        'successMessage' => 'Вы успешно авторизованы и будете перенаправлены в личный кабинет.',
        'validate' => 'email:required,password:required',
        'hooks' => 'AjaxIdentification',

        'method' => 'login',

        'redirectTo' => 5,
        'redirectTimeout' => 3000,
        'usernameField' => 'email',

        'email.vTextRequired' => 'Укажите email.',
        'password.vTextRequired' => 'Введите пароль.',
        'errorFieldName' => 'errorLogin'
    ],
  • errorFieldName - в этом параметре необходимо указать имя скрытого поля, в которое будет записан текст ошибки авторизации, если оставить пустым ошибка будет показана во вплывающем сообщении.

    Внимание

    Скрытое поле с именем из параметра errorFieldName необходимо добавить самостоятельно.

Редактирование профиля

Форма
html
<form data-si-form="dataForm" data-si-preset="dataedit">
    <label>
        <input type="text" name="fullname" value="{$_modx->user.fullname}" placeholder="ФИО">
        <p data-si-error="fullname"></p>
    </label>      
    <label>
        <input type="email" name="email" value="{$_modx->user.email}" placeholder="Email">
        <p data-si-error="email"></p>
    </label>
    <label>
        <input type="tel" name="phone" value="{$_modx->user.phone}" placeholder="Телефон">
        <p data-si-error="phone"></p>
    </label>      
    <label>
        <input type="text" name="extended[inn]" value="{$_modx->user.extended['inn']}" placeholder="ИНН">
        <p data-si-error="extended[inn]"></p>
    </label>     
    <button type="submit">Сохранить</button>
</form>
Пресет
php
    'dataedit' => [
        'hooks' => 'AjaxIdentification',
        'method' => 'update',
        'successMessage' => 'Данные сохранены.',
        'clearFieldsOnSuccess' => 0,

        'validate' => 'email:required:email',
        'email.vTextRequired' => 'Укажите email.'
    ],

Смена пароля

Форма
html
<form data-si-form="editPassForm" data-si-preset="editpass">
    <label>
        <input type="password" name="password" placeholder="Введите пароль">
        <p data-si-error="password"></p>
    </label>   
    <label>
        <input type="password" name="password_confirm" placeholder="Подтврдите пароль">
        <p data-si-error="password_confirm"></p>
    </label>     
    <button type="submit">Изменить</button>
</form>
Пресет
php
    'editpass' => [
        'hooks' => 'AjaxIdentification',
        'method' => 'update',
        'successMessage' => 'Пароль изменён.',

        'validate' => 'password:required:minLength=^8^:regexp=^/\A[\da-zA-Z!#\?&]*$/^,password_confirm:password_confirm=^password^',

        'password.vTextRequired' => 'Придумайте пароль.',
        'password.vTextRegexp' => 'Пароль может содержать только цифры, латинские буквы и символы !,#,?,&',
        'password.vTextMinLength' => 'Пароль должен быть не менее 8 символов.',
    ],

Выход из аккаунта

Форма
html
<form data-si-form="logoutForm" data-si-preset="logout">
    <input type="hidden" name="errorLogout">
    <button type="submit">Выйти</button>
</form>
Пресет
php
    'logout' => [
        'hooks' => 'AjaxIdentification',
        'method' => 'logout',
        'successMessage' => 'До новых встреч!',
        'redirectTo' => 1,
        'errorFieldName' => 'errorLogout'
    ],

Сброс пароля

Форма
html
<form data-si-form="forgotForm" data-si-preset="forgot">   
    <label>
        <input type="email" name="email" placeholder="Email">
        <p data-si-error="email"></p>
    </label>        
    <button type="submit">Сбросить</button>
</form>
Пресет
php
    'forgot' => [
        'hooks' => 'AjaxIdentification,FormItSaveForm,FormItAutoResponder',
        'method' => 'forgot',
        'successMessage' => 'Новый пароль отправлен на ваш email',

        'usernameField' => 'email',
        'validate' => 'email:required:userNotExists',

        'fiarSubject' => 'Восстановление пароля',
        'fiarFrom' => 'email@domain.ru',
        'fiarTpl' => '@FILE chunks/emails/resetPassEmail.tpl',

        'email.vTextRequired' => 'Укажите email.',
        'email.vTextUserNotExists' => 'Пользователь не найден',
    ]

Валидаторы