yii 后台模版 adminLTE 以及后台用户分离
来源:互联网 发布:非诚勿扰程序员专场 编辑:程序博客网 时间:2024/06/15 17:56
yii 安装完毕,介绍一款帅气的后台模版 adminLTE
git地址: https://github.com/dmstr/yii2-adminlte-asset
安装参考 ReadMe
php composer.phar require dmstr/yii2-adminlte-asset "2.*"
安装完成后修改配置文件: backend/config/main.php 添加代码:
'view' => [ 'theme' => [ 'pathMap' => [ '@app/views' => '@vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app' ], ],],
但是这样不利于我们之后对它的修改,所以复制yii2-adminlte的 layout 和 site到 backend/views 下,删除上面的配置也可以达到效果。
分离后台用户
首先创建后台用户表:
执行命令:
yii migrate/create admin_user
然后修改生成的 迁移文件:
public function up() { $this->createTable('admin_user', [ 'id' => $this->primaryKey(), 'username' => $this->string()->notNull()->unique(), 'auth_key' => $this->string(32)->notNull(), 'password_hash' => $this->string()->notNull(), 'password_reset_token' => $this->string()->unique(), 'email' => $this->string()->notNull()->unique(), 'status' => $this->smallInteger()->notNull()->defaultValue(10), 'created_at' => $this->integer()->notNull(), 'updated_at' => $this->integer()->notNull(), ]); } public function down() { $this->dropTable('admin_user'); }
运行命令:
yii migrate
生成 admin_user 表
接下来修改配置文件: backend/config/main.php,修改对user的配置为下面这样:
'user' => [ 'identityClass' => 'backend\models\AdminUser', 'enableAutoLogin' => false, 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], ],
在 backend/models/下创建 AdminUser.php 内容如下:
<?phpnamespace backend\models;use Yii;use yii\base\NotSupportedException;use yii\behaviors\TimestampBehavior;use yii\db\ActiveRecord;use yii\web\IdentityInterface;/** * User model * * @property integer $id * @property string $username * @property string $password_hash * @property string $password_reset_token * @property string $email * @property string $auth_key * @property integer $status * @property integer $created_at * @property integer $updated_at * @property string $password write-only password */class AdminUser extends ActiveRecord implements IdentityInterface{ const STATUS_DELETED = 0; const STATUS_ACTIVE = 10; /** * @inheritdoc */ public static function tableName() { return 'admin_user'; } /** * @inheritdoc */ public function behaviors() { return [ TimestampBehavior::className(), ]; } /** * @inheritdoc */ public function rules() { return [ [['username', 'auth_key', 'password_hash', 'email', 'created_at', 'updated_at'], 'required'], [['status', 'created_at', 'updated_at'], 'integer'], [['username', 'auth_key'], 'string', 'max' => 32], [['password_hash', 'password_reset_token', 'email'], 'string', 'max' => 255], [['username','email'], 'unique'], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'username' => '用户名', 'auth_key' => 'Auth Key', 'password_hash' => 'Password Hash', 'password_reset_token' => 'Password Reset Token', 'email' => '邮箱', 'status' => '状态', 'created_at' => '创建时间', 'updated_at' => '更新时间', ]; } /** * @inheritdoc */ public static function findIdentity($id) { return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); } /** * @inheritdoc */ public static function findIdentityByAccessToken($token, $type = null) { throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); } /** * Finds user by username * * @param string $username * @return static|null */ public static function findByUsername($username) { return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]); } public static function findByEmail($email) { return static::findOne(['email' => $email]); } /** * Finds user by password reset token * * @param string $token password reset token * @return static|null */ public static function findByPasswordResetToken($token) { if (!static::isPasswordResetTokenValid($token)) { return null; } return static::findOne([ 'password_reset_token' => $token, 'status' => self::STATUS_ACTIVE, ]); } /** * Finds out if password reset token is valid * * @param string $token password reset token * @return boolean */ public static function isPasswordResetTokenValid($token) { if (empty($token)) { return false; } $timestamp = (int) substr($token, strrpos($token, '_') + 1); $expire = Yii::$app->params['user.passwordResetTokenExpire']; return $timestamp + $expire >= time(); } /** * @inheritdoc */ public function getId() { return $this->getPrimaryKey(); } /** * @inheritdoc */ public function getAuthKey() { return $this->auth_key; } /** * @inheritdoc */ public function validateAuthKey($authKey) { return $this->getAuthKey() === $authKey; } /** * Validates password * * @param string $password password to validate * @return boolean if password provided is valid for current user */ public function validatePassword($password) { return Yii::$app->security->validatePassword($password, $this->password_hash); } /** * Generates password hash from password and sets it to the model * * @param string $password */ public function setPassword($password) { $this->password_hash = Yii::$app->security->generatePasswordHash($password); } /** * Generates "remember me" authentication key */ public function generateAuthKey() { $this->auth_key = Yii::$app->security->generateRandomString(); } /** * Generates new password reset token */ public function generatePasswordResetToken() { $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); } /** * Removes password reset token */ public function removePasswordResetToken() { $this->password_reset_token = null; }}
修改 backend/controllers/SiteController.php 主要是 use 部分
use Yii;use yii\web\Controller;use yii\filters\VerbFilter;use yii\filters\AccessControl;use backend\models\LoginForm;
主要是 使用后台自己的LoginForm
修改(没有则创建) backend/models/LoginForm.php
<?phpnamespace backend\models;use Yii;use yii\base\Model;/** * Login form */class LoginForm extends Model{ public $username; public $password; public $rememberMe = true; private $_user; /** * @inheritdoc */ public function rules() { return [ // username and password are both required [['username', 'password'], 'required'], // rememberMe must be a boolean value //['rememberMe', 'boolean'], // password is validated by validatePassword() ['password', 'validatePassword'], ]; } /** * Validates the password. * This method serves as the inline validation for password. * * @param string $attribute the attribute currently being validated * @param array $params the additional name-value pairs given in the rule */ public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { $user = $this->getUser(); if (!$user || !$user->validatePassword($this->password)) { $this->addError($attribute, 'Incorrect username or password.'); } } } /** * Logs in a user using the provided username and password. * * @return boolean whether the user is logged in successfully */ public function login() { if ($this->validate()) { return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); } else { return false; } } /** * Finds user by [[username]] * * @return User|null */ protected function getUser() { if ($this->_user === null) { $this->_user = AdminUser::findByUsername($this->username); } return $this->_user; }}
主要注意代码:
$this->_user = AdminUser::findByUsername($this->username);
接下来就可以在 admin_user 表中手动创建一个账户,用于登录了(后台关闭注册功能,之后添加管理员也通过后台实现。)
添加 数据中的 password_hash 可以通过user表复制过来一个
到此,以后后台用户都是查询 admin_user表了。
接下来你可以后台创建针对admin_user 的CRUD模块。
阅读全文
1 0
- yii 后台模版 adminLTE 以及后台用户分离
- Laravel-添加后台模板AdminLte
- Vue2集成AdminLte 后台模板
- laravel5.5+adminLte搭建后台
- yii 电子商城后台
- HTML-后台登录模版
- HTML-后台管理模版
- php用户登录以及后台处理
- yii2安装AdminLTE Asset Bundle后台主题模板
- yii框架笔记—后台
- yii笔记—后台架构
- YII 框架添加后台管理
- xls后台模版生成文件
- 后台模版的网络框架
- HTML-后台登录模版02
- 前台和后台数据分离
- magento后台用户
- 用户后台登陆拦截
- Tensorflow06-可视化
- 微信小程序链接
- 关于GCD的一些函数
- 数据结构-哈希
- 用powershell
- yii 后台模版 adminLTE 以及后台用户分离
- 1209:梯形
- OpenCV imgproc组件之 图像处理
- Spring源码学习之IoC
- 我们的算法少女
- lambda
- Android之Sqlite升级
- 有关Tomcat 8.0版本文件上传后无权限访问的问题
- 运行.exe,并自动关闭.exe