Witam.
Dopiero zaczynam z oop dlatego prosiłbym o ocenę kodu. Czy zawarłem tutaj podstawowe funkcje umożliwiające bezpieczną i szybką rejestrację? Oraz może jakieś wskazówki jak napisać to krócej?
Dodam, że kod działa, hasła są hashowane, a do łączenia z bazą wykorzystana jest metoda PDO wraz z użyciem prepared statements.
Niektóre funkcje użyte w kodzie pochodzą z mojej innej klasy, o ich działanie się nie martwię i sam jeszcze nad nimi troszkę posiedzę.
Kod:
<?php
class Register {
private $login;
private $password;
private $password2;
private $email;
private $reCaptcha_response;
private $reCaptcha_secret_key = 'sercret_key;
public $error;
public function register_process($post_login, $post_password, $post_password2, $post_email, $post_reCaptcha_response) {
$this->login = $post_login;
$this->password = $post_password;
$this->password2 = $post_password2;
$this->email = filter_var($post_email, FILTER_VALIDATE_EMAIL);
$this->reCaptcha_response = $post_reCaptcha_response;
// Check login length
if (strlen($this->login) < 5 || strlen($this->login) > 16) {
$this->error = 'Login musi zawierać od 5 do 16 znaków';
return $this->error;
}
// Check login's chars
if (!ctype_alnum($this->login)) {
$this->error = 'Login może zawierać tylko litery i cyfry (bez polskich znaków)';
return $this->error;
}
// Check password length
if ((strlen($this->password) < 6) || (strlen($this->password) > 20)) {
$this->error = 'Hasło musi zawierać od 6 do 20 znaków';
return $this->error;
}
// Check passwords disparateness
if ($this->password !== $this->password2) {
$this->error = 'Podane hasła nie są identyczne';
return $this->error;
}
// Check reCaptcha
$check_reCaptcha = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='. $this->reCaptcha_secret_key .'&response='. $this->reCaptcha_response);
$reCaptcha_answer = json_decode($check_reCaptcha);
if (!$reCaptcha_answer->success) {
$this->error = 'Potwierdź, że nie jesteś botem, a może jednak nim jesteś? :o';
return $this->error;
}
// Check login in database
$base_obj = new Base_queries;
if ($base_obj->user_check_login($this->login) > 0) {
$this->error = 'Ten login jest już w użyciu';
return $this->error;
}
// Check email in database
if ($base_obj->user_check_email($this->email) > 0) {
$this->error = 'Ten email jest już w użyciu';
return $this->error;
}
// Register new user
$base_obj->user_register($this->login, $this->password, $this->email);
$this->error = 'Konto zostało zarejestrowane!';
return $this->error;
}
}
Czy po każdym return powinienem używać exit(), aby przeglądarka nie musiała wczytywać reszty kodu?
Czy proces rejestracji powinien być rozbity na więcej metod?
Pozdrawiam!