Я не могу перенаправить пользователя в Yii после входа в систему - PullRequest
0 голосов
/ 04 ноября 2018

Я новичок в Yii, поэтому я решил написать простой сценарий входа в систему, просто чтобы проверить, что я изучил до сих пор.

По некоторым причинам мой код не работает должным образом.

В идеале, если имя пользователя и пароль существуют, его следует перенаправить в представление индекса, а также, если оно не существует, следует перенаправить в представление входа в систему.

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

Есть идеи, что я делаю не так?

Вот мой код контроллера:

<?php

namespace app\controllers;

use app\models\Users;
use Yii;

class UsersController extends \yii\web\Controller
{
    public function actionIndex()
    {

        $model = new users();
        return $this->render('login', [
                'model' => $model,
            ]);
    }

    public function actionLogin()
    {
        $model = new Users();
        if ($model->load(Yii::$app->request->post())) {
                // form inputs are valid, do something here
               $request = Yii::$app->request;
               $form_values = $request->post('Users');
               //var_dump($form_values['email']); exit;
               //echo $form_values['email'];
               if($model !==NULL){
                    $model = $model->doLogin($form_values['email'],$form_values['password']);
                    $session = Yii::$app->session;
                    $session->setFlash('login', 'Login succesful.');
                    return $this->render('index', [
                        'model' => $model,
                    ]);
                }

                elseif($model === NULL){

                    $session = Yii::$app->session;
                    $session->setFlash('login', 'Invalid Login.');
                    return $this->render('login', [
                        'model' => $model,
                    ]);
                }
        }

    }
}

1 Ответ

0 голосов
/ 04 ноября 2018

Это потому, что ваше состояние не имеет смысла, а ваша ветвь else является мертвым кодом.

Сначала вы инициализируете $model переменную:

$model = new Users();

Тогда ваше тестирование, если оно не null:

if($model !==NULL){

Который будет всегда возвращать true, поскольку вы уже инициализировали эту переменную для содержания Users модели, нет никаких шансов, что она будет null. Вероятно, у вас должно быть что-то вроде этого:

class UsersController extends \yii\web\Controller {

    public function actionIndex() {
        $model = Users::findOne(Yii::$app->user->id);
        return $this->render('index', [
            'model' => $model,
        ]);
    }

    public function actionLogin() {
        $model = new Users();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            Yii::$app->session->setFlash('login', 'Login successful.');
            return $this->redirect(['index']);
        }

        return $this->render('login', [
            'model' => $model,
        ]);
    }
}

И обработать логин (проверка имени пользователя и пароля) в методе Users::login(). См. Пример в базовый шаблон приложения .

...