Всегда неправильное имя пользователя или пароль. - Yii2

Я установил расширенное приложение Yii2, я настроил регистрацию в соответствии с моей пользовательской базой данных. После регистрации я попытался войти в систему, и он говорит "Incorrect username or password", мой пароль qwerty, также я проверял его много раз, и он все еще не работает.

Пользовательская таблица

Как вы можете видеть здесь, информация о пользователе после регистрации записывает данные в таблицу пользователей.

Модель регистрации

class SignupForm extends Model
{
public $username;
public $email;
public $password;
public $first_name;
public $middle_name;
public $last_name;
public $contact;
public $birth_date;
public $type;
public $external_type;
public $status;
public $region_id;
public $barangay_id;
public $province_id;
public $city_municipal_id;


/**
 * {@inheritdoc}
 */
public function rules()
{
    return [
        ['username', 'trim'],
        ['username', 'required'],
        ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
        ['username', 'string', 'min' => 2, 'max' => 255],

        ['email', 'trim'],
        ['email', 'required'],
        ['email', 'email'],
        ['email', 'string', 'max' => 255],
        ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],

        ['password', 'required'],
        ['password', 'string', 'min' => 6],

        ['first_name', 'required'],
        ['first_name', 'string', 'max' => 45],

        ['middle_name', 'string', 'max' => 45],

        ['last_name', 'required'],
        ['last_name', 'string', 'max' => 45],

        ['contact', 'required'],
        ['contact', 'string', 'max' => 11],

        ['birth_date', 'required'],

        ['type', 'required'],
        ['type', 'string', 'max' => 45],

        ['external_type', 'string', 'max' => 45],

        ['status', 'string', 'max' => 45],

        ['region_id', 'required'],
        ['barangay_id', 'required'],
        ['province_id', 'required'],
        ['city_municipal_id', 'required'],
    ];
}

/**
 * Signs user up.
 *
 * @return User|null the saved model or null if saving fails
 */
public function signup()
{
    if (!$this->validate()) {
        return null;
    }

    $user = new User();
    $user->username = $this->username;
    $user->email = $this->email;
    $user->setPassword($this->password);
    $user->generateAuthKey();

    $user->first_name = $this->first_name;
    $user->middle_name = $this->middle_name;
    $user->last_name = $this->last_name;
    $user->contact = $this->contact;
    $user->birth_date = $this->birth_date;
    $user->type = $this->type;
    $user->external_type = $this->external_type;
    $user->status = $this->status;
    $user->region_id = $this->region_id;
    $user->barangay_id = $this->barangay_id;
    $user->province_id = $this->province_id;
    $user->city_municipal_id = $this->city_municipal_id;

    return $user->save() ? $user : null;
}
}

Где я ошибся здесь? Это сбивает с толку. Я думаю, что в моем коде нет ошибок, потому что я следовал правильной настройке установки Yii2 Advanced App.

Модель входа

public function login()
{
    if ($this->validate()) {
        return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
    }

    return false;
}

person noobkoder    schedule 14.03.2018    source источник
comment
Во-первых, правильная установка Yii2 не имеет ничего общего с вашими ошибками в коде. Во-вторых, вы вставили сюда только функцию signup(), так как мы можем решить вашу проблему, если вы спросите о login()?   -  person Yupik    schedule 14.03.2018
comment
Потому что, когда вы регистрируетесь, yii2 делает пользователя уже авторизованным, верно? Но после регистрации он перенаправляет меня на индексную страницу, и пользователь не вошел в систему. Я пытался использовать пользовательскую таблицу по умолчанию с помощью миграции yii, и она отлично работает, но когда я использую свою собственную пользовательскую таблицу, это не работает больше.   -  person noobkoder    schedule 14.03.2018
comment
Я не вижу пользователя, регистрирующегося после регистрации в вашем коде. Обновите свой вопрос с помощью правильного кода, в данный момент мы не можем вам помочь.   -  person Yupik    schedule 14.03.2018
comment
Я думаю, что это код, который я могу только дать, я только настроил атрибуты модели SignupForm в соответствии со столбцами пользовательской таблицы. В любом случае спасибо   -  person noobkoder    schedule 14.03.2018
comment
добавьте функцию регистрации/регистрации с вашего контроллера   -  person Muhammad Omer Aslam    schedule 14.03.2018


Ответы (3)


проверьте свою пользовательскую таблицу в phpmyadmin, посмотрите на столбец состояния, если это значение не равно 10, вы можете изменить его на 10.

person Mahmut Aydın    schedule 12.09.2019

Хотя вы не добавили действие для регистрации или подписки, но точку, где вы вызываете функцию $model->signup() из модели, вы должны проверить ее внутри оператора if, а затем добавить вызов \Yii::$app->user->login($userModel); внутри, он войдет в систему после зарегистрироваться.

Ваша функция signup() возвращает объект модели пользователя после вставки пользователя в таблицу.

См. пример кода ниже

if(($userModel=$model->signUp())!==null){
   \Yii::$app->user->login($userModel);
}

Надеюсь, это поможет вам

person Muhammad Omer Aslam    schedule 14.03.2018
comment
На самом деле он уже есть в SiteController pastebin.com/NBJuse8X. - person noobkoder; 15.03.2018
comment
@noobkoder, можете ли вы добавить функцию $user->setPassword();, хотя я вижу, что пароль хеширован в таблице, и когда вы перенаправляетесь на страницу входа в систему после регистрации, отображается ли сообщение о неправильном имени пользователя/пароле? попробуйте добавить var_dump($this->validate()) и print_r($this->attributes) внутри функции login() и посмотрите, что она напечатает. - person Muhammad Omer Aslam; 15.03.2018
comment
После регистрации он перенаправляет меня на страницу индекса, но пользователь не вошел в систему, но если я попытаюсь войти в систему, он скажет, что учетные данные неверны. - person noobkoder; 16.03.2018

Вы пытались настроить свой класс модели пользователя для реализации интерфейса идентификации?

Сначала объявите свой класс так

class MyUser extends ActiveRecord implements IdentityInterface

теперь где-то в вашем классе вам нужно реализовать эти методы

public static function findIdentity($id)
    {
        return self::findOne(['id'=>$id]);
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException("Validation method not supported as of yet.");
    }

    public function getId()
    {
        return $this->id;
    }

    public function getAuthKey()
    {
        return $this->auth_key;
    }

    public function validateAuthKey($authKey)
    {
        return $this->auth_key === $authKey;
    }

затем перейдите в раздел компонентов /config/web.php и найдите компонент 'user'

'user' => [
        'identityClass' => 'app\models\MyUser', //<---Your model class
        'enableAutoLogin' => true,
    ],

Я думаю, с этим вам хорошо идти. Дайте мне знать, если это не сработает.

person natral    schedule 14.03.2018
comment
Этот уже автоматически находится в классе продвинутых пользователей Yii2. - person noobkoder; 15.03.2018