ertttert
Books-CMS.clan.su

Процесс входной регистрации

Процесс входной регистрации начинается тогда, когда пользователь заполняет входную форму (обычно по адресу http://example.com/?q=user или в блоке) и щелкает на кнопке Log in (Вход).

Подпрограммы проверки входной формы проверяют, не заблокировано ли имя пользователя, не запрещен ли доступ правилом доступа и ввел ли пользователь корректные имя и пароль. Об обнаружении любого из этих противопоказаний выдается сообщение.

На заметку! В Drupal применяется как локальная, так и внешняя аутентификация. Примерами систем внешней аутентификации могут служить OpenID, LDAP, Pubcookie и др.
drupal

Drupal пытается локально выполнить подключение пользователя, для чего ищет строку в таблице users с совпадающими именем и хешем пароля. При успешно выполненном входе запускаются два хука пользователя (load и login), которые могут быть реализованы в ваших модулях, как показано на рис. 6.3.

Добавление данных в объект $user во время загрузки

Операция load хука пользователя вызывается, когда объект $user успешно загружен из базы данных в результате вызова user_load(). Это происходит, когда пользователь выполнил вход, когда из ноды выбрана информация об авторе и в ряде других ситуаций.

На заметку! В силу трудоемкости вызова хука пользователя, функция user_load() не вызывается, когда создается текущий экземпляр объекта $user для запроса (см. раздел “Объект $user” ранее в главе). Если вы пишете собственный модуль, всегда вызывайте user_load() перед вызовом функции, которая требует наличия полностью загруженного объекта $user, если вы не полностью уверены, что он загружен.

Сейчас мы напишем модуль с именем loginhistory, который будет вести хронологию входов пользователя. Он будет выводить количество входов пользователя на странице My account (Моя учетная запись). Создайте папку loginhistory в каталоге sites/all/modules/custom/ и добавьте туда файлы, приведенные в листингах 6.4–6.6. Первым будет файл sites/all/modules/custom/loginhistory/loginhistory.info.

Листинг 6.4. Файл loginhistory.info

name = Login History
description = Keeps track of user logins.
package = Pro Drupal Development
core = 7.x
files[] = loginhistory.install
files[] = loginhistory.module

Нам понадобится файл .install для создания таблицы в базе данных, что-бы хранить информацию о входах — sites/all/modules/custom/loginhistory/loginhistory.install.

Листинг 6.5. Файл loginhistory. install

<?php
/**
* Реализация hook_schema().
*/

function loginhistory_schema() {

$schema['login_history'] = array(
 'description' => 'Stores information about user logins.',
 // Хранит информацию о входах пользователя
 'fields' => array(
 'uid' => array(
 'type' => 'int',
 'unsigned' => TRUE,
 'not null' => TRUE,
 'description' => 'The {user}.uid of the user logging in.',
 // {user}.uid пользователя, выполняющего входную регистрацию.
 ),

 'login' => array(
 'type' => 'int',
 'unsigned' => TRUE,
 'not null' => TRUE,
 'description' => 'Unix timestamp denoting time of login.',
 // Метка времени Unix о времени входа.
 ),

 ),
 'index' => array('uid'),
);
return $schema;
}

Листинг 6.6. Файл loginhistory. module

<?php
/**
* @file
* Отслеживает входы пользователя.
*/

/**
* Реализация hook_user_login.
*/

function loginhistory_user_login(&$edit, $account) {

// Добавление новой записи при каждом входе пользователя.
$nid = db_insert('login_history')->fields(array(
 'uid' => $account->uid,
 'login' => $account->login
))->execute();
}

/**
* Реализация hook_user_view_alter.
*/
function loginhistory_user_view_alter(&$build){
global $user;

// Подсчет входов пользователя.
$login_count = db_query("SELECT count(*) FROM {login_history} where uid = :uid",
 array(':uid' => $user->uid))->fetchField();

// Добавление на страницу пользователя количества его входов
$build['summary']['login_history'] = array(
 '#type' => 'user_profile_item',
 '#title' => t('Number of logins'), // Количество входов
 '#markup' => $login_count,
 '#weight' => 10,
);
}

После инсталляции этого модуля каждая успешная входная регистрация пользователя будет запускать операцию login хука hook_user_login, на которую модуль будет отвечать вставкой записи в таблицу login_history базы данных. Когда во время работы хука hook_user_view загружается объект $user, будет вызвана функция hook_user_view_alter, и модуль добавит текущее количество входов для данного пользователя на просматриваемую страницу My account (Моя учетная запись), как показано на рис. 6.4.

Предоставление категорий пользовательской информации

Если у вас есть учетная запись на сайте http://drupal.org, вы можете увидеть эффект предоставления категорий пользовательской информации. Для этого выполните вход и щелкните на ссылке My account (Моя учетная запись); на открывшейся странице вы можете предоставить информацию о себе в нескольких категориях: участие в разработке Drupal, личная информация, рабочая информации и желание получать извещения о новостях.

Всего комментариев: 1
1 SergFooky  
0
<a href=http://zmkshop.ru/stati/proizvodstvo-svarnykh-konstruktsiy/>преимущества сварочного предприятия</a>

Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz