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

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


Вопрос

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

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

 

Можно, конечно, внести правки прямо в скрипт, но как-то это некрасиво. Хотя нужное место я уже вроде нашёл - файл 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'] ) );
         }
 }

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

 

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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