Yii2 前后台登陆退出分离、登陆验证

这里用的yii2高级模板, 基本模板的配置文件在一个文件里,方法基本没什么区别,

1.用户表
要有两个用户表, 当然一个也行,分开是省得麻烦,既然是分离了就彻底分开, 前台表user,后台表user_backend,表结构这里不再说明了,只列出字段

id username auth_key password_hash password_reset_token email status created_at updated_at


2.配置文件
分别将frontend/config/main.php和backend/config/main.php里增加如下代码中user部分内容,注意放在配置文件components参数之内,有user部分的修改即可
要特别注意下 identityCookie和 idParam 参数, 前后台要不一样

//前台配置项
return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    .......省略代码
    'components' => [
        'user' => [
            'identityClass' => 'frontend\models\User', //前台用户验证类
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
            'loginUrl' => ['site/login'],
            'idParam' => '__user',
        ],
        .......省略代码
    ],

//后台配置项
'user' => [
    'identityClass' => 'backend\models\UserBackend', //后台用户验证类
    'enableAutoLogin' => true,
    'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
    'loginUrl' => ['site/login'],
    'idParam' => '__admin',
],


3.控制器登陆退出
这里只列出前台控制器代码,后台是一样的,

//登陆
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,
        ]);
    }
}
//退出
public function actionLogout() {
    Yii::$app->user->logout();
    return $this->goHome();
}


4.模型Model
同样只列出前台部分,后台基本相同, 如下代码getUser()中User::findByUsername使用的为frontend\models\User类的方法, 此类直接使用common\models\User改命名空间即可,

class LoginForm extends Model {
    ....省略代码
    public function login() {
        $user = $this->getUser();
        if($this->validate()) {
            return Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
        } else {
            return false;
        }
    }

    protected function getUser() {
        if ($this->_user === null) {
            $this->_user = User::findByUsername($this->username);
        }
        return $this->_user;
    }
    ....省略代码
}

注意 models\User表名部分, 前台使用的是user 后台使用的是user_backend

public static function tableName() {
    return '`i_user`'; //后台为user_backend
}

 

posted on 2017-11-04 10:44  跳动的汗水  阅读(461)  评论(0编辑  收藏  举报

导航