Вы здесь

Custom login form

0

Как авторизовать пользователя в своей форме?

Версия Drupal: 
7.x
Категория: 
Form API
Вопрос задан 01.12.2015 - 11:40

Ответы

0

посмотрел модуль user

<?php
    function mymodule_login_form($form)
{
    $form['#action'] = url(current_path(), array('query' => drupal_get_destination(), 'external' => FALSE));
    $form['#id'] = 'user-login-form';
    $form['#validate'] = user_login_default_validators();
    $form['#submit'][] = 'user_login_submit';
    $form['name'] = array('#type' => 'textfield',
        '#title' => t('Username'),
        '#maxlength' => USERNAME_MAX_LENGTH,
        '#size' => 15,
        '#required' => TRUE,
    );
    $form['pass'] = array('#type' => 'password',
        '#title' => t('Password'),
        '#size' => 15,
        '#required' => TRUE,
    );
    $form['actions'] = array('#type' => 'actions');
    $form['actions']['submit'] = array('#type' => 'submit',
        '#value' => t('Log in'),
    );
    return $form;
}

Ответ дан 01.12.2015 - 11:44
0

user_authenticate() и user_login_finalize()

Пишите в своей форме поля для получения юзернейма и пароля, прогоняете через user_authenticate. Если вернул число (uid) значит пароль и логин совпали, если FALSE, то нет.

if ($uid = user_authenticate($username, $password)) {
    global $user;
    $user = user_load($uid);

    $login_array = array ('name' => $username);
    user_login_finalize($login_array);
}

Это в один шаг авторизация. Если еще какие-то данные валидируются и могут выдать ошибку, то в validate дополнительно надо проверить user_authenticate, а авторизовывать только в submit. Иначе может получиться так, что данные вел верно, код его сразу же авторизовал, а другие данные выдали ошибку. Получится юзер опять увидит или уже не увидит форму (смотря какие условия на просмотр формы), но уже авторизованый.

Ответ дан 02.12.2015 - 07:02
Аватар пользователя Niklan
Niklan
445