Jump to content

Ustawienie wymaganych znaków do hasła


Mariollo

Recommended Posts

W jaki sposób mogę ustawić wymagane znaki do hasła przy rejestracji użytkowników?

W chwili obecnej każdy może sobie ustawić obojętnie jakie, o ile ma 5 znaków, nawet przykładowo "aaaaa".

 

Chciałbym dodać wymagane 8 znaków, duże i małe litery oraz cyfry.

 

 

Link to comment
Share on other sites

trzeba zmodyfikować klasę

Validate.php

 

sprawa jest dość skomplikowana, bo trzeba bawić się regexpami czyli wyrażeniami regularnymi

 

 

zacząć trzeba od zwiększenia ilości znaków

na początku klasy validate jest kod:

	const PASSWORD_LENGTH = 5;

zmieniasz wartość na 8

 

jest tam funkcja

	public static function isPasswd($passwd, $size = Validate::PASSWORD_LENGTH)
	{
		return (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255);
	}

dodajesz do niej regexpy sprawdzające czy ciąg zawiera małe / duże  znaki

 

coś takiego chyba powinno załątwić sprawę

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$

z tego regexpa korzystasz w ten sposób

$pattern = "^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$";

preg_match($pattern,$password);

i zwraca true albo false (w zależnosci czy haslo spełnia założenia regexpa)

Link to comment
Share on other sites

Dzięki, mam coś takiego:

 

/**

* Check for password validity
*
* @param string $passwd Password to validate
* @param int $size
* @return boolean Validity is ok or not
*/
public static function isPasswd($passwd, $size = 5)
{
return (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255);
 
Czyli size zmieniam na tyle ile chcę, a sprawdzanie małych znaków w którym dokładnie miejscu dodaję?
Link to comment
Share on other sites

tę funkcję trzeba trochę rozbudować :)

	public static function isPasswd($passwd, $size = Validate::PASSWORD_LENGTH){
        if (preg_match("^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$", $passwd) && (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255)){
            return true;
        } else {
            return false;
        }
	}
  • Like 1
Link to comment
Share on other sites

Niestety nie działa mi ta formuła.

 

Na początku validate.php nie mam kodu, który odpowiada za ilość znaków w haśle (const PASSWORD_LENGTH = 5;),

 

więc zmieniłem w podanym przez Ciebie kodzie: PASSWORD_LENGTH na stałą wartość 5.

 

Niestety przy próbie rejestracji i podaniu obojętnie jakiego hasła pojawia się komunikat, że hasło jest nieprawidłowe.

 

Czy coś można jeszcze z tym zrobić?

Edited by Mariollo (see edit history)
Link to comment
Share on other sites

w tej chwili mam tak i działa (ale można wpisać 5 takich samych znaków jako hasło):

 

public static function isPasswd($passwd, $size = 5)
{
return (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255);
}

 

 

 

gdy zmienię na taką:

 

public static function isPasswd($passwd, $size = Validate::5){
        if (preg_match("^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$", $passwd) && (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255)){
            return true;
        } else {
            return false;
        }
}

 

 

to podaje, że hasło jest nieprawidłowe niezależnie co wpiszę

Link to comment
Share on other sites

namotałem z tym pregiem, przepraszam, trochę to wyrażenie szalone i zapomniałem o jednej rzeczy

powinno wyglądać tak:

preg_match("/^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $passwd)

finalna wersja:
 

public static function isPasswd($passwd, $size = Validate::5){
        if (preg_match("/^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $passwd) && (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255)){
            return true;
        } else {
            return false;
        }
}
Link to comment
Share on other sites

  • 2 years later...

 

namotałem z tym pregiem, przepraszam, trochę to wyrażenie szalone i zapomniałem o jednej rzeczy

powinno wyglądać tak:

preg_match("/^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $passwd)

finalna wersja:

 

public static function isPasswd($passwd, $size = Validate::5){
        if (preg_match("/^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $passwd) && (Tools::strlen($passwd) >= $size && Tools::strlen($passwd) < 255)){
            return true;
        } else {
            return false;
        }
}

Z Prestashop 1.6.1.6 nie działa nie idzie się zalogować do panelu administratora - po podaniu hasła wyświetla zawartość różnych tabel (tryb debug), nie idzie wygenerować nowego hasła.   Widać nie wystarczy zmiana tylko w tym  jednym pliku.

Link to comment
Share on other sites

 

 

wyświetla zawartość różnych tabel

nie sądzę, że jest to wywołane zmianą klasy validate bowiem nie odpowiada ona w żadnym wypadku za wyświetlanie się zawartości bazy danych, zwłaszcza w momencie podawania hasła.

Link to comment
Share on other sites

Jak zrobimy coś takiego w pliku validate to strona się rozjedzie ( po wpisaniu prawidłowego hasła ) - nie wyświetla informacji o błędnym haśle tylko białą strone ( w debug brak błedu )

    public static function isPasswd($passwd, $size = Validate::PASSWORD_LENGTH)
    {
       return false;
    }

    public static function isPasswdAdmin($passwd)
    {
       return false;
    }

Funkcja sprawdza tylko długość hasła - wygląda to tak jakby pierw było porównywane wprowadzone hasło z tym co jest w bazie mysql zaczyna inicjować stronę administratora i potem sprawdza czy długość hasła jest ok. Błąd jest chyba gdzieś w samej prescie

 

 

funkcja isPasswdAdmin nie jest wykorzystywana podczas logowania do panelu administratora bo mam ustawione hasło 10 znakowe jak zmienię zmienna

const ADMIN_PASSWORD_LENGTH = 14; 

 to i tak można się zalogować bez żadnego błędu

Edited by LCDK (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...