workman服务端开发模式-应用开发-后端api推送修改一

server/2024/12/26 16:02:41/

一、修改后端api登录

        在根目录下app文件夹下controller文件夹下common文件夹下Login.php文件下,修改doLogin方法,代码如下:

//登录public function doLogin(){$param = $this->request->param();$validate = new \app\validate\common\Login;$result = $validate->check($param);//参数验证if (!$result) return err($validate->getError());//验证码的正确性if (!app()->make(\Other\Captcha::class)->check($param['captcha_code'])) return err('验证码错误');if (time() + 5 < strtotime($param['login_time'])) return err('非法登录');$resData = Admin::dataFind(['email' => trim($param['username'])], 'id,realname,password,ip,status', true);//用户信息的正确性if (empty($resData) && empty($resData['id'])) return err('用户不存在');if ($resData['status'] !== 1) return err('该账号已被禁用');$systemParam = SystemModel::dataFind(['id' => 1],'security_password,platform_token_expira');if ($resData['password'] !== sha1($param['password'] . $systemParam['security_password'])) return err('账号对应的密码错误');$loginIp = $this->request->header('x-real-ip');if(!empty($resData['ip'])){if($resData['ip'] != $loginIp)return err('禁止访问,不在IP白名单中');}// 获取浏览器版本$browserId = Browser::getVersion();// 获取该用户是否在登录状态下$tokenId = Redis::select(config('cache.stores.redis.token_db'))->get('token_' . $resData['id']);// 如果在登录状态下,需要确认IP是否一致if(!empty($tokenId)){// 读取用户之前登录的IP及浏览器$resTokenLogin = TokenModel::dataFind(['token' => $tokenId,'token_type' => 1],'browser_id,login_ip',true);// 如果之前登录的IP存在 之前登录的IP与现在登录的IP进行对比if(!empty($resTokenLogin)){// 如果不相等的情况下,需要告知之前的浏览器做退出动作if($loginIp != $resTokenLogin['login_ip']){GatewayWork::getClientIdByUid($resData['id']);}else{// 如果相等的情况下,就需要判断浏览器是否相等啦,如果不相等的情况下,也是需要让之前的账号多退出的动作if($browserId != $resTokenLogin['browser_id']){GatewayWork::getClientIdByUid($resData['id']);}}}}//写入Token日志$data['token_type'] = 1;$data['menu_name'] = 'CommonLoginDoLogin';$data['admin_id'] = $resData['id'];$data['random_number'] = alnum();$data['browser_id'] = $browserId;$data['login_ip'] = $loginIp;$data['create_time'] = date('Y-m-d',strtotime($param['login_time']));$data['login_time'] = $param['login_time'];$data['expire_time'] = strtotime($param['login_time']) + $systemParam['platform_token_expira'];$token = $data['admin_id'] . $data['random_number'];$data['token'] = sha1(sha1($token) . strtotime($data['login_time']));TokenModel::save($data,[]);//加入跨站攻击验证队列Redis::select(config('cache.stores.redis.token_db'))->setex('token_' . $data['token'],$systemParam['platform_token_expira'],$resData['id']);Redis::select(config('cache.stores.redis.token_db'))->setex('token_' . $resData['id'],$systemParam['platform_token_expira'],Encrypt::encryptRsa($data['token']));/*$emailSender = new EmailSender();$emailSender::send($param['username'],'登录系统',$resData['realname'].'于'.$param['login_time'].'登录系统');*/return succ('登录成功',Encrypt::encryptRsa($token));}

二、修改数据库token操作表

        表结构如下:


http://www.ppmy.cn/server/153364.html

相关文章

HarmonyOS NEXT 实战之元服务:静态案例效果---最近播放音乐

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; Index import { authentica…

TCP/IP 邮件

TCP/IP邮件是互联网通信中非常重要的应用之一。当我们发送电子邮件时&#xff0c;我们实际上并没有直接使用TCP/IP协议&#xff0c;而是通过电子邮件程序&#xff0c;例如微软的Outlook、莲花软件的Notes或Netscape Communicator等来实现。这些电子邮件程序背后使用了不同的TCP…

MFC小知识:CEdit::GetSel函数的使用

CEdit::GetSel函数是CEdit类的成员函数&#xff0c;它的功能是返回编辑框中光标选中区域的开始和结束位置&#xff0c;如果没有选取区域&#xff0c;则返回的就是光标位置&#xff08;开始与结束位置相同&#xff09;。这个函数可以通过CEdit类对象或对象指针调用&#xff0c;它…

谈谈JSON

中文名&#xff1a;JS键值对数据 英文名&#xff1a;JavaScript Object Notation JSON是一种常用的数据格式&#xff0c;其简洁和清晰的层次结构有效地提升了网络传输效率&#xff0c;很多编程语言都支持JSON格式的数据交换。 JSON 相比于 XML 来说&#xff0c;更小、…

一些基础面试题

重写和重载的区别&#xff1a; 方法的重载和重写都是实现多态的方式&#xff0c;区别在于前者实现的是编译时的多态性&#xff0c;而后者实现的是运行时的多态性。重载发生在一个类中&#xff0c;同名的方法如果有不同的参数列表&#xff08;参数类型不同、参数个数不同或者二…

Bayes-GRU-Attention的数据多特征分类预测Matlab实现

Bayes-GRU-Attention的数据多特征分类预测Matlab实现 目录 Bayes-GRU-Attention的数据多特征分类预测Matlab实现分类效果基本描述程序设计参考资料 分类效果 基本描述 Bayes-GRU-Attention的数据多特征分类预测Matlab实现 MatLab贝叶斯(BO)基于-GRU-注意的数据多特征分类预测(…

网页核心页面设计(第10章)

一、动效设计 1、太阳系 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

ffmpeg: stream_loop报错 Error while filtering: Operation not permitted

问题描述 执行ffmpeg命令的时候&#xff0c;报错&#xff1a;Error while filtering: Operation not permitted 我得命令如下 ffmpeg -framerate 25 -y -i /data/workerspace/mtk/work_home/mtk_202406111543-l9CSU91H1f1b3/tmp/%08d.png -stream_loop -1 -i /data/workerspa…