Перейти к контенту
  • 0

Одновременное наличие латинских и русских букв в логине при регистраци


malik

Вопрос

Как правильнее сделать проверку на одновременное наличие латинских и русских букв в логине при регистрации? Это нужно во избежание регистрации ников с визуально похожими буквами разных алфавитов.

Если можно сделать хуком, то подскажите где можно почитать про их написание.

 

Можно, конечно, внести правки прямо в скрипт, но как-то это некрасиво. Хотя нужное место я уже вроде нашёл - файл admin/applications/core/modules_public/global/register.php где-нибудь в начале функции registerForm.

 

Спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Как правильнее сделать проверку на одновременное наличие латинских и русских букв в логине при регистрации? Это нужно во избежание регистрации ников с визуально похожими буквами разных алфавитов.

Делал у себя подобное, только не при регистрации, а отображение на форуме:

- сначала str_replace удаляются все английские буквы и разрешенные спецсимволы;

- затем сравнивается исходный ник и что получилось: если строка не пустая и отличается от исходной, значит есть смешение;

- дальше неанглийские буквы красятся в зеленый цвет.

 

http://images.vfl.ru/ii/1488583343/2e44c821/16320772.gif

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Я когда-то делал что-то вроде таблиц транслитерации, приводил имена к стандартному виду и сравнивал с имеющимися.

Патчить надо файл admin\sources\classes\member\memberFunctions.php в районе 700 строки, искать по словам // Blocking certain chars in username? .  Там проверяются имена на соответствие регулярке из настроек. Можно просто пихнуть 2 регулярки preg_match('/[a-Z]/i'... и [а-Я] . Если обе положительные, то слать лесом. 

По поводу лучшего пути, через месяц 3.х станет официально неподдерживаемой устаревшей версией. Больше никаких патчей и обновлений от разработчиков не будет. Поэтому смысл заморачиваться с оборачиванием хуков есть только, чтобы включать и отключать их потом в админке или если надо тиражировать изменения на 10 форумов. Можно уже выгрузить весь код в личный гитлаб и править все, что захочется, не забывая вставлять комментарии и синхронизировать репозиторий.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Спасибо за развёрнутый ответ. Раз скоро патчи и обновы перестанут выпускать, то проще прям в коде дописать.

 

А ещё вопрос не совсем по теме. В версии 2 можно было написать свой модуль и обращаться к нему прямо через УРЛ (например - мой_сайт/index.php?act=module&module=my-module), а в версии 3 модулей не нашёл. Как теперь реализовывать дополнительный функционал, напрямую не используемый в работе форума, с возможностью прямого обращения к нему? Например, у меня были модули для съёма статистики по юзерам и гостям онлайн, для обзора активности модераторов и т.п.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

В url есть app - приложение, module - модуль и section - секция . В папке форума это будет в папке приложения директория modules_public для публичной части и modules_admin для админской. Внутри нее папка с названием модуля, а в нем уже файл с названием секции. Проще всего добавить секцию в существующий модуль. Там будет все уже проинициализировано родительским классом:

                $this->registry   =  $registry;
		$this->DB         =  $this->registry->DB();
		$this->settings   =& $this->registry->fetchSettings();
		$this->request    =& $this->registry->fetchRequest();
		$this->lang       =  $this->registry->getClass('class_localization');
		$this->member     =  $this->registry->member();
		$this->memberData =& $this->registry->member()->fetchMemberData();
		$this->cache      =  $this->registry->cache();
		$this->caches     =& $this->registry->cache()->fetchCaches();		
		$this->memberData = IPSMember::setUpModerator( $this->memberData );

Просто берете шапку из любой другой секции. В названии класса меняете последний кусок на свою секцию(совпадает с именем файла). И переписываете функцию doExecute .

Если скрипт не собирается все инициализировать по полной, то  можно его вообще куда угодно положить и обратиться браузером. Начало у него будет такое:
 

<?php

define( 'IPS_IS_SHELL', true );
define( 'IPB_THIS_SCRIPT', 'public' );
require_once( './initdata.php' );
require_once( IPS_ROOT_PATH . 'setup/sources/base/ipsRegistry_setup.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'setup/sources/base/ipsController_setup.php' );/*noLibHook*/

$registry = ipsRegistry::instance();
$registry->init();
$request = $registry->fetchRequest();

Это для корневой папки. Если куда-то класть еще, то надо просто прописать путь к initdata.php . Registry и Controller подключаются те, которые в модуле установки, это позволяет обойти некоторые ошибки и не инициализировать лишнее. Но такое начало позволяет пользоваться всеми встроенными функциями и настройками. Методы работы с базой, например, можно запускать через $registry->DB()

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Получилось вроде, надо проверить на живых людях )

 

Патчить надо файл admin\sources\classes\member\memberFunctions.php в районе 700 строки, искать по словам // Blocking certain chars in username? .  Там проверяются имена на соответствие регулярке из настроек. Можно просто пихнуть 2 регулярки preg_match('/[a-Z]/i'... и [а-Я] . Если обе положительные, то слать лесом. 

 

Добавил в настройки "Ограничения пользовательских имен" пункт с названием "Сообщение об ошибке при наличии русских и английских букв в имени", ключом "username_error_rueng" и текущим значением "Имя не может содержать одновременно русские и английские буквы!".

 

Дописал после указанного вами блока, начинающегося со строки "// Blocking certain chars in username?", вот такой блок:

 if( ipsRegistry::$settings['username_error_rueng'] )
 {
         if( preg_match("/[a-z]/i", $_name) && preg_match("/[а-я]/i", $_name) )
         {
                 return array( 'name' => $original, 'errors' => array( ipsRegistry::$settings['username_error_rueng'] ) );
         }
 }

Работает нормально, за исключением буквы "ё", она не попадает в диапазон "а-я". С учётом того, что и вообще форум как-то по-особенному воспринимает эту букву в именах пользователей (вероятно где-то в коде это специально описано) я решил, что лучше вообще запретить её использование в именах.

 

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.