提交的数据
<code>$_GET = [ 'r' => 'site/login', ]; $_POST = [ '_csrf' => 'WjgxM0tfa3YxQn1rcg4vHioLVlt.EjhOAnFVR3MuXgQ7WkNmBwofIg==', 'LoginForm' => [ 'username' => 'admin', 'password' => 'admin', 'rememberMe' => '1', ], 'login-button' => '', ]; </code>
yii2 处理管理员登陆部分的代码:
<code class="lang-php">#/var/www/example.com/public_html/yii/backend/controllers/SiteController.php public function actionLogin() { if (!\Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } else { return $this->render('login', [ 'model' => $model, ]); } } </code>
但是我并没有user表,这里是backend,管理员登陆部分,对应的表是admin,结构。
<code class="lang-sql"><br>mysql> desc admin; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | id | int(10) unsigned | NO | | NULL | | | name | char(30) | NO | | | | | pwd | char(32) | NO | | | | | email | char(30) | NO | | | | +-------+------------------+------+-----+---------+-------+ 4 rows in set (0.03 sec) mysql> select * from admin; +----+---------+----------------------------------+-------+ | id | name | pwd | email | +----+---------+----------------------------------+-------+ | 1 | admin | b9840270f7f4ed699ccc93cc09914d21 | | +----+---------+----------------------------------+-------+ 1 row in set (0.00 sec) </code>
yii2 他默认的都是user表,可我并没有user表。
我现在提交了用户名和密码,该如何修改actionLogin里面的代码才最合适。
提交的数据
<code>$_GET = [ 'r' => 'site/login', ]; $_POST = [ '_csrf' => 'WjgxM0tfa3YxQn1rcg4vHioLVlt.EjhOAnFVR3MuXgQ7WkNmBwofIg==', 'LoginForm' => [ 'username' => 'admin', 'password' => 'admin', 'rememberMe' => '1', ], 'login-button' => '', ]; </code>
yii2 处理管理员登陆部分的代码:
<code class="lang-php">#/var/www/example.com/public_html/yii/backend/controllers/SiteController.php public function actionLogin() { if (!\Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } else { return $this->render('login', [ 'model' => $model, ]); } } </code>
但是我并没有user表,这里是backend,管理员登陆部分,对应的表是admin,结构。
<code class="lang-sql"><br>mysql> desc admin; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | id | int(10) unsigned | NO | | NULL | | | name | char(30) | NO | | | | | pwd | char(32) | NO | | | | | email | char(30) | NO | | | | +-------+------------------+------+-----+---------+-------+ 4 rows in set (0.03 sec) mysql> select * from admin; +----+---------+----------------------------------+-------+ | id | name | pwd | email | +----+---------+----------------------------------+-------+ | 1 | admin | b9840270f7f4ed699ccc93cc09914d21 | | +----+---------+----------------------------------+-------+ 1 row in set (0.00 sec) </code>
yii2 他默认的都是user表,可我并没有user表。
我现在提交了用户名和密码,该如何修改actionLogin里面的代码才最合适。
1 参考高级模板里里的common\models\User 修改 Admin, 并改成目前的密码加密方式.
2 修改 配置文件里的
<code>'user' => [ // 'identityClass' => 'common\models\User', 'identityClass' => 'common\models\Admin', 'enableAutoLogin' => true, ], </code>
试了一下2.0, 把models/User.php
修改成下边这样.
<code class="lang-php"><?php namespace app\models; //继承关系修改为如下 class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface { public $id; //username字段修改为name public $name; //password字段修改为pwd public $pwd; public $authKey; public $accessToken; public static function tableName() { //数据库表名修改user为admin return '{{admin}}'; } public static function findIdentity($id) { return static::findOne($id); } public static function findIdentityByAccessToken($token) { return static::findOne(['access_token' => $token]); } public static function findByUsername($username) { //username修改为name return static::findOne(['name' => $username]); } public function getId() { return $this->id; } public function getAuthKey() { return $this->authKey; } public function validateAuthKey($authKey) { return $this->authKey === $authKey; } public function validatePassword($password) { //password修改为pwd return $this->pwd === $password; } } </code>
你应该增加一个UserIdentity 并且修改LoginForm 两者结合才可以不用父类的User表
很简单,添加权限管理,快捷方便。你可以去看官方文档中的rbac的角色管理一章。建议:后台管理员和普通用户放在一块。这样才有高级程序员的范!