Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Запрет символов в пароле

Опубликовано:

Здравствуйте. Необходимо запретить Русский язык в паролях, а так же большинство символов. В register.php сделал это следующим путём:

elseif(!preg_match("/^[-a-zA-Z0-9_]+$/i", $in_password)) 
	{
			// Сообщение
			$form_errors['password'][$this->lang->words['pass_too_characters']] = $this->lang->words['pass_too_characters'];
	}

 

Подскажите пожалуйста, а как быть в ipb.register.js? нужно это же сообщение показать "на лету". И помогите пожалуйста найти смену пароля, чтобы сделать то же самое. Спасибо!

Изменено пользователем That

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

Опубликовано:
  • Автор

Да, так JS заработал. Спасибо большое! А где искать смену пароля из личного кабинета? Потому как пользователь уже после регистрации может прописать "плохой" пароль в своём аккаунте.

Опубликовано:

admin/applications/core/modules_public/global/lostpass.php

 

				if( $pass_a != $pass_b )
			{
				$this->registry->output->showError( 'pass_no_match', 10187 );								
			}

Опубликовано:
  • Автор

Что-то я немного не пойму что тут делать, зато понял что новый пароль пользователь может мало того указать любым символом что мне не нужно, так и ещё длиной в 1 символ. Что тоже очень плохо.

Опубликовано:

Ниже этого кода вставляете проверку пароля по длине или по символам.

Опубликовано:
  • Автор

Так. Ниже у меня проверяется длина следующим путём:

if ( strlen( $pass_a ) < 4 )
{
	$form_errors['password'][$this->lang->words['pass_too_short']] = $this->lang->words['pass_too_short'];
}

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа. Пароль успешно меняется.

Опубликовано:

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа.

Логика подсказывает, что не там делаете.

Для настроек email/пароля в профиле используется ссылка index.php?app=core&module=usercp&tab=core&area=email

А выше указан путь admin/applications/core/modules_public/global/lostpass.php к файлу для "Забыл пароль"

 

 

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа

admin/applications/core/extensions/usercpForms.php

 

	/**
 * UserCP Save Form: Password
 *
 * @param	array	Array of member / core_sys_login information (if we're editing)
 * @return	mixed	Array of errors / boolean true
 */
public function saveFormPassword( $member=array() )

 

Ниже у меня проверяется длина следующим путём

Используйте mb_strlen

Опубликовано:
  • Автор

А если кроме длины строки нужно проверить

!preg_match("/^[-a-zA-Z0-9_]+$/i"

? Ведь судя по описанию можно лишь получить внутреннюю кодировку.

Опубликовано:

Ведь судя по описанию можно лишь получить внутреннюю кодировку.

Я написал, чтобы использовали mb_strlen вместо strlen.

Мой комментарий относился к

Ниже у меня проверяется длина следующим путём:

if ( strlen( $pass_a )

{

$form_errors['password'][$this->lang->words['pass_too_short']] = $this->lang->words['pass_too_short'];

}

Опубликовано:

Добрый день. Тоже заинтересовал данный вопрос, потому как нужно запретить менее 6ти символов и всякие там кавычки в изменяемом пароле. Ознакомившись с темой я понял что я ничего не понял. У нас есть путь:

index.php?app=core&module=usercp&tab=core&area=email

Судя по всему он ведёт к файлу /applications/core/modules_public/usercp/ и там лежит файл manualResolver.php. Открыв его я попал в тупик. Либо я пришёл не туда, либо я не могу понять куда тут добавить проверку.

Опубликовано:

Судя по всему он ведёт к файлу

newbie выше написал куда он ведет, но почему-то никто этого не видит

 

admin/applications/core/extensions/usercpForms.php

В методе saveFormEmailPassword

 

Найти (этот код повторяется 2 раза в файле, найти второй, в функции saveFormEmailPassword)

 

		if ( $new_pass != $chk_pass )
		{
			return array( 0 => $this->lang->words['passwords_not_matchy'] );
		}

Ниже добавить

			if( !preg_match("/^[-a-zA-Z0-9_]+$/i", $new_pass ) ) 
		{
			return array( 0 => $this->lang->words['pass_too_characters'] );
		}

		if ( strlen( $new_pass ) < 4 )
		{
			return array( 0 => $this->lang->words['pass_too_short'] );
		}

Опубликовано:

Прошу прощения, но я внимательно перечитал данную информацию и перепроверил, не работает. Затем я убрал свои ключи языка и подставил ваши. Ничего... После чего я вовсе просто скопировал ваш код и заменил свой. Не помогло. Вот код данного файла. Текущая версия форума 3.4.9.

Опубликовано:

Проверил, все работает. Это можно увидеть по еррор блоку который появляется сверху.

Естественно эти лэнги не существуют, их нужно создать в языке, либо написать сообщение ошибки вместо них.

Опубликовано:

@siv1987,

Так дело то сейчас не в том, что видны ошибки или нет :). Я залогинился, меняю пароль на любой односимвольный. Мне форум пишет что пароль успешно изменён. Тут же я ввожу свой новый пароль, который я до этого забил в 1 символ и меняю его на 2 символа. Соответственно система проверяет ранее изменёный пароль и так как всё успешно - меняет его ещё раз на 2х символьный :)

Изменено пользователем Gendrixon

Опубликовано:

Я залогинился, меняю пароль на любой односимвольный. Мне форум пишет что пароль успешно изменён.

Очень странно, потому что я с этой модификации пароль поменять не могу.

 

8HjMUPk.png

 

Возможно у вас не сохраняются изменения в файле, или есть какой-то хук который перегружает этот метод (мало ли).

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.