Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii Framework 2.0使用用户数据库登录_Php_Database_Yii_Login_Yii2 - Fatal编程技术网

Php Yii Framework 2.0使用用户数据库登录

Php Yii Framework 2.0使用用户数据库登录,php,database,yii,login,yii2,Php,Database,Yii,Login,Yii2,我一直在尝试在Internet上搜索如何在Yii framework 2.0中编写代码,以便用户可以使用存储在数据库中的凭据登录,而不是使用以models/user.php为前缀的数组登录。我知道如何在Yii 1中做到这一点。但在YiI2.0中,我真的不知道如何做到这一点。由于Yii 2.0尚未发布(只有测试版可用),我在互联网上找不到很多关于登录数据库的Yii 2.0教程。检查Yii高级应用程序: 数据库中存储了用户注册、登录、重置密码的完整实现。您可以使用以下扩展实现数据库用户管理: 或

我一直在尝试在Internet上搜索如何在Yii framework 2.0中编写代码,以便用户可以使用存储在数据库中的凭据登录,而不是使用以models/user.php为前缀的数组登录。我知道如何在Yii 1中做到这一点。但在YiI2.0中,我真的不知道如何做到这一点。由于Yii 2.0尚未发布(只有测试版可用),我在互联网上找不到很多关于登录数据库的Yii 2.0教程。

检查Yii高级应用程序:


数据库中存储了用户注册、登录、重置密码的完整实现。

您可以使用以下扩展实现数据库用户管理:

如果您想编写自己的自定义脚本来管理用户,可以覆盖Yii2 identityClass

在配置文件的组件部分添加:

'user' => [
        'identityClass'   => 'app\models\User',
        'enableAutoLogin' => true,
    ],
请注意,您的用户模型必须实现\yii\web\IdentityInterface

下面是可以用来实现数据库身份验证的模型类的示例


我希望这会对你有所帮助。干杯:)

效果很好,谢谢!现在我们有两个模型类,User和gii/Users。是否可以仅使用默认用户类?如果是,我如何实施?提前感谢!是的,您可以通过扩展yii/db/ActiveRecord而不是\yii\base\Object并将上面代码中的“DbUser”对象替换为“self”来实现。您还需要使用以下方法提及用于保存用户数据的表名:公共静态函数tableName(){return'users';//db table的name},如果需要,您可能可以添加一些验证规则。authkey和accestoken是数据库中users表中的必填列吗?如果这两列不在表中,它会影响yii2中的自定义登录吗?我认为它不会影响任何事情。如果没有authkey/Acestoken字段,您应该不会有问题。干杯我同意(并实现了)上面@rxseen的方法。你可以用这个
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;
}

}