提交的数据
$_GET = [ 'r' => 'site/login', ]; $_POST = [ '_csrf' => 'WjgxM0tfa3YxQn1rcg4vHioLVlt.EjhOAnFVR3MuXgQ7WkNmBwofIg==', 'LoginForm' => [ 'username' => 'admin', 'password' => 'admin', 'rememberMe' => '1', ], 'login-button' => '', ];
yii2 处理管理员登陆部分的代码:
#/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,
]);
}
}
但是我并没有user表,这里是backend,管理员登陆部分,对应的表是admin,结构。
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)
yii2 他默认的都是user表,可我并没有user表。
我现在提交了用户名和密码,该如何修改actionLogin里面的代码才最合适。
很简单,添加权限管理,快捷方便。你可以去看官方文档中的rbac的角色管理一章。建议:后台管理员和普通用户放在一块。这样才有高级程序员的范!
你应该增加一个UserIdentity 并且修改LoginForm 两者结合才可以不用父类的User表
试了一下2.0, 把models/User.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;
}
}
1 参考高级模板里里的common\models\User 修改 Admin, 并改成目前的密码加密方式.
2 修改 配置文件里的
'user' => [ // 'identityClass' => 'common\models\User', 'identityClass' => 'common\models\Admin', 'enableAutoLogin' => true, ],