Yii Framework 2.0 Login With User Database

后端 未结 2 1663
慢半拍i
慢半拍i 2020-12-05 05:15

I have been trying to search on the Internet how to write the code in Yii framework 2.0 so that user can login with the credentials stored in the database and not from the a

相关标签:
2条回答
  • 2020-12-05 06:03

    You can implement database user management using extesions like https://github.com/amnah/yii2-user.

    OR

    If you want to write your own custom script to manage the users you can override Yii2 identityClass.

    In the component section of your config add:

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

    Please note that your user model MUST IMPLEMENT \yii\web\IdentityInterface

    Here is the example of the model class that you can use to implement database authentication

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

    I hope that would be helpful to you . Cheers :)

    0 讨论(0)
  • 2020-12-05 06:07

    Check the Yii2 advanced application:

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

    There full implementation of signup, login, resetPassword for Users stored in DB.

    0 讨论(0)
提交回复
热议问题