Реєстрація користувача в Yii2. Частина 2

320

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій статті ми розглянемо, як здійснюється реєстрація користувача в Yii2.

Продовжимо попередню статтю і роботу з реєстрацією користувачів у фреймворку Yii. Нагадаю, ми з вами створили модель для форми реєстрації, отримали об’єкт цієї моделі в екшені і додали представлення, яке і показує потрібну форму. Також ми додали таблицю user в БД, яка і буде зберігати дані зареєстрованих користувачів.

Давайте тепер спробуємо прийняти дані з форми і перевірити, чи завантажуються вони модель, роздрукувавши на екран вміст моделі:

public function actionSignup(){
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new SignupForm();
if($model->load(\Yii::$app->request->post()) && $model->validate()){
echo “; print_r($model);
die;
}
return $this->render(‘signup’, compact(‘model’));
}

Введемо будь тестові дані і відправимо їх.

Реєстрація користувача в Yii2. Частина 2

Відмінно працює! Модель заповнюється введеними даними. Підемо далі. Подальша наша робота буде пов’язана з моделлю User, оскільки саме ця модель вказана в якості компонента ідентифікації у файлі config\web.php.

Реєстрація користувача в Yii2. Частина 2

Давайте приберемо в екшені роздруківку моделі форми реєстрації та замість цього отримаємо об’єкт моделі User і заповнимо його отриманими з даними форми.

if($model->load(\Yii::$app->request->post()) && $model->validate()){
$user = new User();
$user->username = $model->username;
$user->password = \Yii::$app->security->generatePasswordHash($model->password);
echo “; print_r($user); die;
}

В якості тесту відразу ж роздрукуємо об’єкт $user.

Реєстрація користувача в Yii2. Частина 2

Як бачимо, у полі password ми записали хеш пароля, а не пароль у відкритому вигляді. Це нам допоміг зробити метод generatePasswordHash() класу Security. Саме хеш пароля ми і будемо записувати в БД, оскільки зберігати пароль у відкритому вигляді – погана практика.

Приберемо роздруківку і викличемо метод save() моделі. Після успішного збереження зареєстрованого користувача зробимо редирект. Підсумковий код екшену буде виглядати так:

public function actionSignup(){
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new SignupForm();
if($model->load(\Yii::$app->request->post()) && $model->validate()){
$user = new User();
$user->username = $model->username;
$user->password = \Yii::$app->security->generatePasswordHash($model->password);
if($user->save()){
return $this->goHome();
}
}
return $this->render(‘signup’, compact(‘model’));
}

Тепер перейдемо до моделі User і внесемо правки в неї. Для початку, замість Object тепер модель буде успадковувати ActiveRecord:

class User extends ActiveRecord implements IdentityInterface{}

Коли ми працюємо з ActiveRecord, оголошення властивостей моделі вже зайві. Тепер давайте спробуємо зареєструватися на сайті, ввівши в форму довільні логін і пароль. Якщо помилок немає, то ми будемо перекинуті на головну сторінку. Ну а в БД з’явиться новий користувач.

Реєстрація користувача в Yii2. Частина 2

Відмінно працює! А давайте спробуємо зареєструвати ще одного користувача з таким самим логіном.

Реєстрація користувача в Yii2. Частина 2

Не вийшло. Замість реєстрації ми отримали помилку, що логічно, оскільки для поля username в таблиці проставлено унікальний індекс, тобто записати дублююче значення в це поле нам не дасть сервер. Це правильно, але не дуже красиво. Щоб позбутися від такої помилки – додамо правило валідації в модель реєстрації:

public function rules() {
return [
[[‘username’, ‘password’], ‘required’, ‘message’ => ‘Заповніть поле’],
[‘username’, ‘unique’, ‘targetClass’ => User::className(), ‘message’ => ‘Цей логін вже зайнятий’],
];
}

І перевіримо ще раз реєстрацію повторної імені користувача.

Реєстрація користувача в Yii2. Частина 2

Ось тепер все добре. У наступній статті ми продовжимо працювати з моделлю User і реалізуємо авторизацію зареєстрованих користувачів.

Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.