Laravel - poprawna walidacja

0

Witam, chciałem się zapytać czy taka walidacja formularza jest poprawna? Jeśli nie to jakie poprawki mógłbym wnieść? Wiem że laravel posiada wbudowaną walidację, a nawet wbudowane formularze logowania i rejestracji, ale chcę to zrobić 'z palca'.
Oto kod:

		$post = $request->all();
		$countnick = Rejestracja::where('nick','=',$post['nick'])->count();
		$countemail = Rejestracja::where('email','=',$post['email'])->count();
		
		//walidacja
		if (($countnick or $countemail) > 0)
		{
			echo 'Podany Nick lub Email istnieje w bazie, proszę wybrać inny';
			return view('rejestracja');
		}else if($post['haslo'] != $post['rehaslo'])
		{
			echo 'Hasła nie pasują do Siebie!';
			return view('rejestracja');
		}else
		{
		Zapisuje zmienne pobrane z formularza w tablicę i przesyłam je do bazy.
		}
0

Po to wbudowali walidację, żeby kod był bardziej czytelny, a tutaj wygląda to słabo (w porównaniu z tym jak to może wyglądać).

To co napisałeś można zastąpić na to:

$this->validate($request, [
    'nick'            => 'required|max:255|unique:users,nick',
    'email'           => 'required|max:255|email|unique:users,email',
    'haslo'           => 'required|min:6|confirmed', // Pole potwierdzające poprawność hasła zmień z 'rehaslo' na 'haslo_confirmation'
]);

Nie uważasz, że to wygląda lepiej?

Więcej rulek znajdziesz tutaj: https://laravel.com/docs/5.3/validation#available-validation-rules

0
Laran napisał(a):

Nie uważasz, że to wygląda lepiej?

I tak można ładniej :p Validacja powinna być w klasie dziedziczącej po request ;)

0

Czytałem właśnie o tej walidacji i chyba ją zastosuję rzeczywiście.

Pozwolę sobie jeszcze zadać kilka pytań, których w dokumentacji nie mogę znaleŹć
1.W jakim folderze znajdę możliwość zmiany ustawień treści generowanych przez wbudowany Validator?
2.Jakie jest zastosowanie tego csrf tokena? Wymagany jest zarówno podczas rejestracji jak i logowania. Myślałem że to może robić jako zmienna sesyjna, lecz w bazie jeden token, przyporządkowany jest do kilku innych użytkowników.

0
  1. w translacjach poszukaj + możesz też stworzyć kompletnie customowe wiadomości
  2. ochrona przed atakiem. Token potwierdza, ze to ty otworzyłeś dany formularz do edycji. https://sekurak.pl/czym-jest-podatnosc-csrf-cross-site-request-forgery/
0

Oprócz tego taki błąd składniowy: nie if (($countnick or $countemail) > 0), tylko if ($countnick > 0 || $countemail > 0).
W tym jednym konkretnym przypadku wychodzi na to samo, natomiast generalnie operatory bitowe działają ździebko inaczej niż Ci się wydaje :P

0

Super dzięki. A czy wypada zapytaniem

       <code class="php"> $countnick = Rejestracja::where('nick','=',$post['nick'])->count();

wykonać skrypt logowania ?

Sprawdza tylko czy podany login jest w bazie, tak samo z hasłem. Jeśli obydwa parametry są, loguje się. Nie sprawdza wartości zmiennych i to wydaje Mi się będzie gwoździem do trumny jakby brać pod uwagę zabezpieczenie.

0

Pamiętaj o hashowaniu haseł jeszcze.

Więc jeżeli chcesz to pisać ręcznie samemu to najpierw zobacz czy dany user istnieje w Twojej bazie, a jeżeli tak to porównaj zahaszowane hasła.

Co do zmiany treści jakie wyrzuca validator to tu masz jeszcze kilka sposobów na ich zmianę: https://www.laravel.com/docs/5.3/validation#custom-error-messages

1 użytkowników online, w tym zalogowanych: 0, gości: 1