• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

yii图书商城 学习笔记之六 后台帐号模块

开发技术 开发技术 2周前 (05-01) 4次浏览

mysql 管理员数据表设计

yii图书商城 学习笔记之六 后台帐号模块

表字段一览
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生成模型

yii图书商城 学习笔记之六 后台帐号模块

插入一条用户数据

新建工具函数

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


程序员灯塔
转载请注明原文链接:yii图书商城 学习笔记之六 后台帐号模块
喜欢 (0)