Модуль позволяет пользователю авторизоваться без ввода логина и пароля, зайдя на сайт по определенной ссылке. Ссылка может выглядить так:
http://example.com/feedback/?auth_hash=53228d4d1ce43f72252f9b7717bd83c910
Естественно, хэш-ключ будет другой.
Хэш передается через параметр auth_hash, и, если есть пользователь, которому соответствует этот код, он станет авторизованным.
В настройках модуля можно включить/выключить возможность авторизации по хэшу, задать «время жизни» хэш-кода в часах после создания.
Параметры, определяющие время жизни хэша и возможности многократной авторизации, можно переопределить при непосредственном создании хэша, речь об этом пойдет ниже.
Для некоторых разделов можно запретить авторизацию по хэшу.
Допустим раздел с номером 5 и ключевым словом bank служит для управления лицевым счетом пользователя и требуется запретить в нем авторизоваться по хэшу. В этом случае в настройках модуля («Настройки» - «Системные» - «Хэш-авторизация») нужно через запятую перечислить номера всех разделов, где авторизация по хэшу запрещена. В данном случае это просто 5. Пользователь заходит на страницу «О компании» по адресу example.com/about/?auth_hash=34523458s4dfcdg4df370452f92771223bd8ac910 (предполагается, что существует пользователь с таким хэш кодом) и система авторизует его там, но при переходе на страницу управления счетом example.com/bank/ пользователь перестанет быть авторизованным (чтобы авторизоваться ему надо будет ввести логин и пароль). Причем если пользователь перейдет на другую страницу (где авторизация по хэшу разрешена), он снова станет авторизированным.
Для создания, удаления хэш-кодов существуют следующие методы.
Для создания хэша существует функция create_auth_hash()
Ее вызов:
$nc_auth->hash->create_auth_hash ( int $user_id, [bool $delete_hash], [int $expire]] )
Параметр | Описание |
---|---|
$user_id | номер пользователя, для которого создается хэш |
$delete_hash | удалять ли хэш после первого захода (если параметр не передан, то берется значение из настроек модуля). Если параметр равен true, то повторная авторизация по этому хэшу будет невозможна |
$expire | время жизни хэша в часах (если параметр не передан, то берется значение из настроек модуля) |
Функция возвращает строку с хэш-кодом.
Пример использования:
Необходимо создать хэш код для пользователя с идентификатором 3:
$nc_auth = nc_auth::get_object(); $hash = $nc_auth->hash->create_auth_hash (3, 1, 24*3);
переменная $hash будет содержать хэш-код , передав который через параметр auth_hash, пользователь будет автоматизирован с номером 3, причем не важно, в каком разделе будет происходить авторизация. Авторизоваться по этому хэшу можно будет только один раз в течение трех дней.
Есть смысл отправить ссылку с этим хэшом пользователю:
$mailer = new CMIMEMail(); $mailer->mailbody( «Пройдите по ссылке http://example.com/somesub/?auth_hash=».$hash); $mailer->send(«e-mail пользователя 3», «Admin@example.com», «Admin@example.com», «Новое сообщение», «Adim»);
Пользователю придет письмо следующего вида:
«Пройдите по ссылке htpp://example.com/somesub/?auth_hash=4bcdce0f65cdf542e29a327e06fc132811347174»
пройдя по которой, он станет авторизированным пользователем.
Если требуется удалить хэш для пользователя, то нужно вызвать метод delete_auth_hash()
$nc_auth->hash->delete_auth_hash( int $user_id )
user_id — номер пользователя, хэш которого нужно удалить.
Пример использования:
$nc_auth->hash->delete_auth_hash(3);
удалит хэш для пользователя с идентификатором 3.
Чтобы узнать хэш пользователя, можно воспользоваться методом get_hash_by_user()
$nc_auth->hash->get_hash_by_user( int $user_id )
user_id — номер пользователя, для которого нужно узнать хэш.
Пример использования:
$hash = $nc_auth->hash->get_hash_by_user(3);
В переменной $hash будет содержаться хэш для пользователя с идентификатором 3.
В массиве $current_user, хранящий информацию о текущем авторизированном пользователе, содержится так же информация о варианте авторизации, она доступна через ключ AuthVariant.
Если $current_user['AuthVariant'] константе NC_AUTHTYPE_HASH, то пользователь авторизировался с помощью хэша.
Сам хэш код хранится в таблице User в поле Auth_Hash.
Примечание! Функционал работает при типе авторизации «cookie» или «session». Непосредственно авторизоваться по хэшу в систему управления нельзя.