web-dev-qa-db-fra.com

Yii Framework 2.0 Connexion avec la base de données utilisateur

J'ai essayé de rechercher sur Internet comment écrire le code dans Yii framework 2.0 afin que l'utilisateur puisse se connecter avec les informations d'identification stockées dans la base de données et non depuis le tableau, préfixées dans models/User.php. Je sais comment faire ça dans Yii 1. Mais dans Yii 2.0, je ne sais vraiment pas comment faire ça. Étant donné que Yii 2.0 n'a pas encore été publié (seule la version bêta est disponible), je n'ai pas pu trouver de nombreux didacticiels Yii 2.0 sur Internet sur la connexion à la base de données.

15
O Connor

Vous pouvez implémenter la gestion des utilisateurs de la base de données à l'aide d'extesions telles que https://github.com/amnah/yii2-user .

OR

Si vous souhaitez écrire votre propre script personnalisé pour gérer les utilisateurs, vous pouvez remplacer Yii2 identityClass.

Dans la section des composants de votre configuration, ajoutez:

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

Veuillez noter que votre modèle d'utilisateur DOIT METTRE EN ŒUVRE\yii\web\IdentityInterface

Voici l'exemple de la classe de modèle que vous pouvez utiliser pour implémenter l'authentification de la base de données

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;
}

}

J'espère que cela vous serait utile. À votre santé :)

30
Rx Seven

Vérifiez l'application avancée Yii2:

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

Il y a implémentation complète de l'inscription, de la connexion, de resetPassword pour les utilisateurs stockés dans la base de données.

3
user1852788