| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | <?php// +----------------------------------------------------------------------// | Tplay [ WE ONLY DO WHAT IS NECESSARY ]// +----------------------------------------------------------------------// | Copyright (c) 2017 http://tplay.pengyichen.com All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: 听雨 < 389625819@qq.com >// +----------------------------------------------------------------------namespace app\admin\controller;use app\admin\controller\base\Permissions;use app\common\behavior\AdminLogBehavior;use think\Cache;use think\Controller;use think\Cookie;use think\Db;use think\Hook;use think\Session;class Common extends Controller{    const USE_REMEMBER = 'usermember';    protected function _initialize()    {        stopCC();        if (\think\Env::get('online_status', 'open') == 'close') {            exit("网站后台维护中 ...");        }        Hook::listen('admin_log');    }    /**     * 登录     * //不适用表单令牌,验证码输错时,token不会变,导致要刷新页面并重新输入     * @return mixed     */    public function login()    {        if (Session::has(Permissions::ADMIN_ID) == false) {            if ($this->request->isPost()) {                $post = $this->request->post();                $validate = new \think\Validate([                    ['name|账号', 'require|alphaDash|max:30'],                    ['password|密码', 'require|length:6,32'],                    ['captcha', 'require|captcha', '验证码不能为空|验证码不正确'],                ]);                if (!$validate->check($post)) {                    $this->error('提交失败:' . $validate->getError());                }                //连续错误5次账号暂停                $error_count = Cache::get('error_count' . $post['name']);                if ($error_count >= 5) {                    (new AdminLogBehavior())->updateLastLog("登入频繁,请休息10分钟", false);                    $this->error('登入频繁,请休息10分钟');                }                $name = Db::name('admin')->where('name', $post['name'])->find();                if (empty($name)) {                    //不存在该用户名                    (new AdminLogBehavior())->updateLastLog("账号不存在", false);                    $this->error('账号不存在');                } else {                    //验证密码                    $post['password'] = password($post['password']);                    if ($name['password'] != $post['password']) {                        //记录次数                        if (empty($error_count)) {                            Cache::set('error_count' . $post['name'], 1, 600);                        } else {                            Cache::set('error_count' . $post['name'], ++$error_count, 600);                        }                        (new AdminLogBehavior())->updateLastLog("密码错误", false);                        $this->error('密码错误');                    } else {                        //是否记住账号                        if (!empty($post['remember']) and $post['remember'] == 1) {                            //检查当前有没有记住的账号                            if (Cookie::has(self::USE_REMEMBER)) {                                Cookie::delete(self::USE_REMEMBER);                            }                            //保存新的                            Cookie::forever(self::USE_REMEMBER, $post['name']);                        } else {                            //未选择记住账号,或取消操作                            if (Cookie::has(self::USE_REMEMBER)) {                                Cookie::delete(self::USE_REMEMBER);                            }                        }                        Session::set(Permissions::ADMIN_ID, $name['id']); //保存admin_id                        Session::set(Permissions::ADMIN_NAME, $name['nickname']); //保存admin_name                        Session::set(Permissions::ADMIN_CATE_ID, $name['admin_cate_id']); //保存admin_cate_id                        //记录登录时间和ip                        Db::name('admin')->where('id', $name['id'])->update(['login_ip' => $this->request->ip(), 'login_time' => time()]);                        //清空次数                        Cache::rm('error_count' . $post['name']);                        (new AdminLogBehavior())->updateLastLog("登录成功", false);                        $this->success('登录成功,正在跳转...', 'admin/index/index');                    }                }            } else {                if (Cookie::has(self::USE_REMEMBER)) {                    $this->assign(self::USE_REMEMBER, Cookie::get(self::USE_REMEMBER));                }                return $this->fetch();            }        } else {            $this->redirect('admin/index/index');        }    }}
 |