Проблема с валидацией в Yii2?

Всем привет! Вопрос по валидации в Yii2. Возвращает "Пароль или логин введены неверно", хотя данные я ввожу с бд MSSQL правильные. Вот мой контроллер SiteController , модель Login и модель RecipientPortalUser:
<?php
//namespace app\controllers;
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
use app\models\Signup;
use app\models\Login;
use yii\db\Query;
use app\models\RecipientPortalUser;


/**
 * Site controller
 */
class SiteController extends Controller
{

    public function actionIndex()
    {
        $records = RecipientPortalUser::getAllRecords();
        return $this->render('index',compact('records'));
    }


    public function actionLogout()
    {
        if(!Yii::$app->user->isGuest)
        {
            Yii::$app->user->logout();
            return $this->redirect(['login']);
        }
    }
    // для регистрации
    public function actionSignup()
    {
        $model = new Signup();
        if(isset($_POST['Signup']))
        {
            $model->attributes = Yii::$app->request->post('Signup');
            if($model->validate() && $model->signup())
            {
                return $this->redirect(['index']);
            }
        }
        return $this->render('signup',['model'=>$model]);
    }
    //1. Проверить существует ли пользователь?
    //2. "Внести" пользователя в систему(в сессию)
    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest)
        {

            return $this->goHome();
        }

        $login_model = new Login();

        if( Yii::$app->request->post('Login'))
        {
            $login_model->attributes = Yii::$app->request->post('Login');
          
            if($login_model->validate())
            {
                Yii::$app->user->login($login_model->getUser());
                return $this->goHome();
            }
            else
            {
                return "No validated";
            }
        }
        return $this->render('login',['login_model'=>$login_model]);
    }
}


//==========================================================================================
<?php

namespace app\models;
use yii\base\Model;
class Login extends Model
{
    public $login;      //   есть
    public $password;   //   есть
    public function rules()
    {
        return [
            [['login','password'],'required'],
            [['login'],'string'],
            [['login'],'trim'],
            [['password'],'trim'],
            ['password','validatePassword'] //собственная функция для валидации пароля
        ];
    }

    public function validatePassword($attribute,$params)
    {
        if(!$this->hasErrors()) // если нет ошибок в валидации
        {

            $user = $this->getUser();
     
            if(!$user || !$user->validatePassword($this->password))
            {
                //если мы НЕ нашли в базе такого пользователя
                //или введенный пароль и пароль пользователя в базе НЕ равны ТО,
                $this->addError($attribute,'Пароль или  логин введены неверно');
                //добавляем новую ошибку для атрибута password о том что пароль или имейл введены не верно

            }
        }
    }




    public  function getUser()
    {
        return RecipientPortalUser::findOne(['_login'=>$this->login]); // а получаем мы его по введенному логину
    }
}


//=================================================================================================
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class RecipientPortalUser extends ActiveRecord implements IdentityInterface
{

    //public $login;
    public $password;
    //public $id;

    public static function tableName()
    {
        return 'dbo.RecipientPortal_User';
    }

    public static function primaryKey()
    {
        return ['row_id'];
    }

    public  function setPassword($password)
    {
        $this->password = sha1($password);
    }
    public function validatePassword($password)
    {
        return $this->password === sha1($password);
    }
    //==========================
    public static function findIdentity($id)
    {
        return self::findOne($id);
    }
    public function getId()
    {
        return $this->id;
    }
    public static function findIdentityByAccessToken($token, $type = null)
    {
    }
    public function getAuthKey()
    {
    }
    public function validateAuthKey($authKey)
    {
    }
    public static function getAllRecords()
    {
        $findAll =  RecipientPortalUser::find()->all();
        return $findAll;
    }
   
}
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
хотя данные я ввожу с бд MSSQL правильные

пароль в базе хранится в виде хеша, как Вы можете быть уверенны, что вводите его правильно?

Далее, вот тут дебажте:
if(!$user || !$user->validatePassword($this->password))
            {
                $this->addError($attribute,'Пароль или  логин введены неверно');
            }

тут два условия, надо проверить какое именно не срабатывает. Если второе, то дебажте тут:
public function validatePassword($password)
    {
        return $this->password === sha1($password);
    }

выводите что в левой и в правой части равенства
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
А зачем именно Yii::$app->request->post('Login')?
Сделайте просто Yii::$app->request->post()
Зачем параметры в
public function validatePassword($attribute,$params)
?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы