job.answiz.com
  • 1
Votes
name
name Punditsdkoslkdosdkoskdo

Yii Framework 2.0 Login With User Database

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 array, prefixed in models/User.php. I know how to do that in Yii 1. But in Yii 2.0, I really don't know how to do that. Since Yii 2.0 has not been released yet (only the beta version is available), I could not find many Yii 2.0 tutorials on the Internet about logging-in with the database.

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'   => 'appmodelsUser',
        'enableAutoLogin' => true,
    ],

Please note that your user model MUST IMPLEMENT yiiwebIdentityInterface

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

 

namespace appmodels;

//appmodelsgiiUsers is the model generated using Gii from users table

use appmodelsgiiUsers as DbUser;

class User extends yiiaseObject implements yiiwebIdentityInterface {

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
Reply Report