Yii Framework 2.0 Вход с помощью базы данных пользователей

Я пытаюсь найти в Интернете, как написать код в Yii framework 2.0, чтобы пользователь мог войти в систему с учетными данными, хранящимися в базе данных, а не из массива, с префиксом в моделях /User.php. Я знаю, как это сделать в Yii 1. Но в Yii 2.0 я действительно не знаю, как это сделать. Поскольку Yii 2.0 еще не выпущен (доступна только бета-версия), я не смог найти много учебников Yii 2.0 в Интернете о входе в систему с базой данных.

Ответы

Ответ 1

Вы можете реализовать управление пользователями базы данных, используя extesions, такие как https://github.com/amnah/yii2-user.

ИЛИ

Если вы хотите написать свой собственный script, чтобы управлять пользователями, вы можете переопределить идентификационный класс Yii2.

В разделе компонента вашей конфигурации добавьте:

'user' => [
        'identityClass'   => 'app\models\User',
        'enableAutoLogin' => true,
    ],

Обратите внимание, что ваша модель пользователя ДОЛЖНА ВЫПОЛНЯТЬ \yii\web\IdentityInterface

Вот пример класса модели, который вы можете использовать для реализации проверки подлинности базы данных

namespace app\models;

//app\models\gii\Users is the model generated using Gii from users table

use app\models\gii\Users as DbUser;

class User extends \yii\base\Object implements \yii\web\IdentityInterface {

public $id;
public $username;
public $password;
public $authKey;
public $accessToken;
public $email;
public $phone_number;
public $user_type;

/**
 * @inheritdoc
 */
public static function findIdentity($id) {
    $dbUser = DbUser::find()
            ->where([
                "id" => $id
            ])
            ->one();
    if (!count($dbUser)) {
        return null;
    }
    return new static($dbUser);
}

/**
 * @inheritdoc
 */
public static function findIdentityByAccessToken($token, $userType = null) {

    $dbUser = DbUser::find()
            ->where(["accessToken" => $token])
            ->one();
    if (!count($dbUser)) {
        return null;
    }
    return new static($dbUser);
}

/**
 * Finds user by username
 *
 * @param  string      $username
 * @return static|null
 */
public static function findByUsername($username) {
    $dbUser = DbUser::find()
            ->where([
                "username" => $username
            ])
            ->one();
    if (!count($dbUser)) {
        return null;
    }
    return new static($dbUser);
}

/**
 * @inheritdoc
 */
public function getId() {
    return $this->id;
}

/**
 * @inheritdoc
 */
public function getAuthKey() {
    return $this->authKey;
}

/**
 * @inheritdoc
 */
public function validateAuthKey($authKey) {
    return $this->authKey === $authKey;
}

/**
 * Validates password
 *
 * @param  string  $password password to validate
 * @return boolean if password provided is valid for current user
 */
public function validatePassword($password) {
    return $this->password === $password;
}

}

Надеюсь, это было бы полезно для вас. Приветствия:)

Ответ 2

Проверьте расширенное приложение Yii2:

https://github.com/yiisoft/yii2-app-advanced

Здесь полная реализация регистрации, входа, resetPassword для пользователей, хранящихся в БД.