yii 自带用户系统

user 数据表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `status` smallint(6) NOT NULL DEFAULT 10,
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `password_reset_token` (`password_reset_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

vendor/yiisoft/yii2/web/User.php 以组件方式加载,
故调用方式为 \YII::$app->user
绑定的User model类默认为 common\models\User (全命名空间)
修改前后台绑定各自User model类, 参考如下;

默认配置为

'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
            'loginUrl' => ['site/login'],
        ],

修改 yii默认前后台配置, 分离前后台使用数据表

复制公共模型到前台
cp common/models/User.php frontend/models/User.php
修改模型命名空间 vi frontend/models/User.php
namespace frontend\models;

修改 frontend/models/SignupForm.php
改动命名空间引用User
namespace frontend\models;
use yii\base\Model;
use frontend\models\User;
改动验证引用User

public function rules()
{
    return [

        ['username', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'This username has already been taken.'],
        ['email', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'This email address has already been taken.'],
    ];
}

复制公共模型到前台
cp common/models/LoginForm.php frontend/models/
修改SiteController 命名空间中引用LoginForm
use frontend\models\LoginForm;
修改 LoginForm 命名空间
namespace frontend\models;
修改 frontend\models\PasswordResetRequestForm.php
修改命名空间引用 User
namespace frontend\models;
use frontend\models\User;
修改验证规则引用User;

public function rules()
    {
        return [
            ['email', 'exist',
                'targetClass' => '\frontend\models\User',
                'filter' => ['status' => User::STATUS_ACTIVE],
                'message' => 'There is no user with this email address.'
            ],
        ];
    }

修改 frontend\models\ResetPasswordForm.php
修改命名空间引用User;
namespace frontend\models;
use frontend\models\User;

配置前台user组件 vi frontend/config/main.php

'user' => [
            'identityClass' => 'frontend\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
            'loginUrl' => ['site/login'],
        ],

复制公共模块下的LoginFrom 到后台模块
cp common/models/LoginForm.php backend/models/LoginForm.php

修改 LoginForm.php 命名空间中引用LoginForm

namespace backend\controllers;
use backend\models\LoginForm;

修改LoginForm.php名称空间空间
namespace backend\models

修改LoginForm中调用User语句为Admin::

protected function getUser()
{
    if ($this->_user === null) {
        $this->_user = Admin::findByUsername($this->username);
    }

    return $this->_user;
}

cp common/models/User.php.back backend/models/Admin.php
修改Admin.php 命名空间

namespace backend\models;

修改Admin.php类名

class Admin extends ActiveRecord implements IdentityInterface

修改数据表名

public static function tableName()
{
    return '{{%admin}}';
}

修改配置文件加载User组件

'components' => [
      'user' => [
            'identityClass' => 'backend\models\Admin',
            'enableAutoLogin' => true,
            'idParam' => 'a673946c007d6a9927f70bdf5d491861',
            'identityCookie' => ['name' => '57e1c593208b24ba572dc1591823eec3', 'httpOnly' => true],
        ],

// \yii\base\model实现load方法代码如下

public function load($data, $formName = null)
{
    $scope = $formName === null ? $this->formName() : $formName;
    if ($scope === '' && !empty($data)) {
        $this->setAttributes($data);

        return true;
    } elseif (isset($data[$scope])) {
        $this->setAttributes($data[$scope]);

        return true;
    }

    return false;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值