yii2从数据库登录

垃圾邮件

我尝试从数据库进行登录。据我了解,我只需要替换默认模型用户即可。所以我尝试了两次,但在两种情况下Yii::$app->user->isGuesttrue必须false

LoginForm.php

<?php

namespace app\models;

use Yii;
use yii\base\Model;


class LoginForm extends Model
{
    public $username;
    public $password;
    public $rememberMe = true;

    private $_user = false;


    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // username and password are both required
            [['username', 'password'], 'required'],
            // rememberMe must be a boolean value
            ['rememberMe', 'boolean'],
            // password is validated by validatePassword()
            ['password', 'validatePassword'],
        ];
    }


    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, 'Incorrect username or password.');
            }
        }
    }


    public function login()
    {
        if ($this->validate()) {

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


    public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByUsername($this->username); //default
        #    $this->_user = Users::findByUsername($this->username);//my try 1
        #    $this->_user = Users2::findByUsername($this->username); // my trey 2
        }

        return $this->_user;
    }
}

Users.php

<?php

namespace app\models;

use Yii;


class Users extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
{
    /**
     * @inheritdoc
     */

    public $authKey;
    public $accessToken;
    public static function tableName()
    {
        return 'users';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'surname', 'login', 'password', 'email'], 'required'],
            [['name', 'surname'], 'string', 'max' => 50],
            [['login'], 'string', 'max' => 20],
            [['password'], 'string', 'max' => 16],
            [['email'], 'string', 'max' => 250]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
            'surname' => 'Surname',
            'login' => 'Login',
            'password' => 'Password',
            'email' => 'Email',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getOrders()
    {
        return $this->hasMany(Orders::className(), ['user_id' => 'id']);
    }
    public static function findIdentity($id) {
        $user = self::find()
            ->where([
                "id" => $id
            ])
            ->one();
        if (!count($user)) {
            return null;
        }
        return new static($user);
    }

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

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

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

    /**
     * @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;
    }
}

Users2.php

<?php

namespace app\models;

use Yii;


    class Users2 extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
{

        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return '2sers';
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
        return [
            [['id'], 'integer'],
            [['authKey', 'accessToken', 'name', 'surname', 'login', 'password', 'email'], 'required'],
            [['authKey', 'accessToken'], 'string'],
            [['name', 'surname'], 'string', 'max' => 50],
            [['login'], 'string', 'max' => 20],
            [['password'], 'string', 'max' => 16],
            [['email'], 'string', 'max' => 250]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'authKey' => 'Auth Key',
            'accessToken' => 'Access Token',
            'name' => 'Name',
            'surname' => 'Surname',
            'login' => 'Login',
            'password' => 'Password',
            'email' => 'Email',
        ];
    }
    public static function findIdentity($id) {
        $user = self::find()
            ->where([
                "id" => $id
            ])
            ->one();
        if (!count($user)) {
            return null;
        }
        return new static($user);
    }

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

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

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

    /**
     * @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;
    }
}
DespeiL

在您的配置更改中

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

 'user' => [
        'identityClass' => 'app\models\Users',//or Users2
        'enableAutoLogin' => true,

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Yii2从数据库登录(设置未知属性:app \ models \ User :: password_hash)

来自分类Dev

将Yii2登录表单连接到数据库

来自分类Dev

Yii2用SQLite数据库登录似乎不起作用

来自分类Dev

Yii2框架无法使用自定义数据库登录

来自分类Dev

在没有默认数据库表的yii2中创建自定义登录名

来自分类Dev

Yii2 db getStats(数据库查询数)

来自分类Dev

Yii2数据库架构最佳实践

来自分类Dev

yii2上的多个数据库连接

来自分类Dev

Yii2将模型保存到数据库

来自分类Dev

Yii2创建数据库连接

来自分类Dev

Yii2将模型保存到数据库

来自分类Dev

从Yii2中的数据库版本检查

来自分类Dev

Yii2创建数据库连接

来自分类Dev

Yii2内爆来自数据库的查询

来自分类Dev

在yii2中插入数据库吗?

来自分类Dev

yii2检查数据库类型(mysql或oracle)

来自分类Dev

yii2覆盖数据库类中的batchinsert

来自分类Dev

Yii2 迁移无法创建数据库

来自分类Dev

如何从 Yii2 连接到 RDS 数据库?

来自分类Dev

Yii2 问题以获取数据库查询的结果

来自分类Dev

文件上传操作期间,将数据保存在yii2中的数据库中

来自分类Dev

Yii2在不使用GridView的情况下显示数据库中的数据

来自分类Dev

Yii2表单提交数据值未保存在数据库中

来自分类Dev

无法将数据csv导入yii2中的数据库

来自分类Dev

yii2为什么我不能在数据库中存储数据?

来自分类Dev

在文件上载操作期间将数据保存在yii2中的数据库中

来自分类Dev

yii2复选框字段不在数据库中保存数据

来自分类Dev

Yii2中数据库的特定数据量

来自分类Dev

Yii2 如何将接收到的 JSON 数据保存到数据库中