mysql 管理员数据表设计
表字段一览
uid 用户uid
nickname 用户名
mobile 手机号码
email 邮箱地址
sex 1:男 2:女 0:没填写
avatar 头像
login_name 登录用户名
login_pwd 登录密码
login_salt 登录密码的随机加密秘钥
status 1:有效 0:无效
updated_time 最后一次更新时间
created_time 插入时间
借助cookie实现管理员登录退出功能和优化
con/UserContoller
class UserContoller extends BaseWebContoller
{
public function actionLogin()
{
//如果是get请求,直接展示登录页面
if (\Yii::$app->request->isGet) {
$this->layout = 'user';
return $this->render('login');
}
//登录逻辑处理
$login_name = trim($this->post('login_name', ""));
$login_pwd = trim($this->post('login_pwd', ""));
if (!$login_name || !$login_pwd) {
return '<script>alert("请输入正确的用户名和密码");</script>'
}
//从用户表获取login_name = $login_name 信息是否存在
$user_info = User::find()->where(['login_name' => $login_name])->one();
if (!$$user_info) {
return '<script>alert("请输入正确的用户名和密码");</script>'
}
//验证密码
//密码加密算法= md5(login_pwd + md5(login_salt))
$auth_pwd = md5($login_pwd.md5($user_info['login_salt']));
if ($auth_pwd != user_info['login_pwd']) {
return '<script>alert("请输入正确的用户名和密码");</script>'
}
//保存用户的登录状态
//cookies 进行保存用户登录态
// 加密字符串 + "#" + uid, 加密字符串 = md5(login_name + login_pwd + login_salt)
$auth_token = md5($user_info['login_name'].$user_inf['login_pwd'].$user_info['login_salt']);
$this->setCookie("mooc_book", $auth_token."#".$user_info['uid']);
return $this->redirect(UrlService::buildWebUrl("/dashboard/index"));
// return $this->renderJs('请输入正确的用户名和密码', UrlService::buildWebUrl('/user/login'));
}
}
使用gii生成模型
插入一条用户数据
新建工具函数
BaseWebController
class BaseWebController
{
//统一js提醒
public function renderJs($msg, $url) {
return $this->renderPartical("@app/views/common/js", ['msg' => $msg, 'url' => $url]);
}
}
common/js
<script>
alert("<?=$msg;?>")
</script>
class UserContoller
{
public function actionLogout()
{
$this->removeCooke("mooc_book");
return $this->redirect(UrlService::buildWebUrl("/user/login"));
}
}
统一验证
common/BaseController
class BaseController extends BaseWebController
{
public function __construct($id, $module, array $config = [])
{
parent::__construct($id, $module, $config);
$this->layout = "main";
}
public function beforeAction($action)
{
$is_login = $this->checkLoginStatus();
if ($is_login) {
if (\Yii:$app->request->isAjax) {
$this->renderJson([], "未登录", 302);
} else {
$this->redirect(UrlService::buildWebUrl("/user/login"));
}
return false;
}
return true;
}
//验证是否当前登录态有效
private function checkLoginStatus()
{
$auth_cookie =$this->getCookie("mooc_book", "")
if (!$auth_cookie) {
return false;
}
list($auth_token, $uid) = explode("#", $auth_cookie);
if (!$auth_token || !$uid ) {
return false;
}
if (preg_match("/^\d+$/", $uid)) {
return false;
}
$user_info = User::find()->where(['uid' =>$uid])->one();
if (!$user_info) {
return false;
}
$auth_token_md5 = md5($user_info['login_name'].$user_info['login_pwd'].$user_info['login_salf']);
if ($auth_token != $auth_token_md5) {
return false;
}
return true;
}
}
让仪表盘继承BaseController