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');
- }
- }
- }
|