登录ip和日志改为事件

This commit is contained in:
taoser 2020-11-29 17:27:47 +08:00
parent 2e21cf8dd3
commit f07f24175c
10 changed files with 180 additions and 82 deletions

View File

@ -18,6 +18,8 @@ class Msgres
return $res = [ return $res = [
'success' => 0, 'success' => 0,
'error' => 1, 'error' => 1,
'login_success' => Lang::get('login success'),
'login_error' => Lang::get('login error'),
'add_success' => Lang::get('add success'), 'add_success' => Lang::get('add success'),
'add_error' => Lang::get('add error'), 'add_error' => Lang::get('add error'),
'edit_success' => Lang::get('edit success'), 'edit_success' => Lang::get('edit success'),

View File

@ -43,8 +43,8 @@ class User extends Model
//登陆校验 //登陆校验
public function login($data) public function login($data)
{ {
//查询用户 //查询使用邮箱或者用户名登陆
$user = Db::name('user')->whereOr('email',$data['name'])->whereOr('name',$data['name'])->find(); $user = $this::whereOr('email',$data['name'])->whereOr('name',$data['name'])->find();
//对输入的密码字段进行MD5加密再进行数据库的查询 //对输入的密码字段进行MD5加密再进行数据库的查询
$salt = substr(md5($user['create_time']),-6); $salt = substr(md5($user['create_time']),-6);
@ -63,33 +63,19 @@ class User extends Model
//Cookie::set('user_id', $user['id'], 604800); //Cookie::set('user_id', $user['id'], 604800);
//Cookie::set('user_name', $user['name'], 604800); //Cookie::set('user_name', $user['name'], 604800);
} }
$ip = request()->ip();
/*
$url = 'http://ip-api.com/json/'.$ip.'?lang=zh-CN';
//$url = 'http://ip-api.com/json/?lang=zh-CN';
$add = Api::urlGet($url);
if($add->status == 'success'){
$city = $add->city;
} else {
$city ='未知';
}
*/
Db::name('user')->where('id',$user['id'])->update(
[
//'city' => $city,
'last_login_ip' => $ip,
'last_login_time' => time()
]
);
Log::channel('login')->info('login:{user} {ip}',['user'=>$user['name'],'ip'=>$ip]);
//查询结果1表示有用户用户名密码正确 //查询结果1表示有用户用户名密码正确
return 1; return 1;
}else{ }else{
return '用户名或密码错误'; return '用户名或密码错误';
} }
} }
//更新数据
public function updata($data)
{
//dump($data);
}
//注册校验 //注册校验
public function reg($data) public function reg($data)

View File

@ -2,7 +2,8 @@
// 事件定义文件 // 事件定义文件
return [ return [
'bind' => [ 'bind' => [
'Message' => 'app\event\Message', 'UserLogin' => 'app\event\UserLogin',
'Message' => 'app\event\Message',
], ],
'listen' => [ 'listen' => [
@ -11,6 +12,7 @@ return [
'HttpEnd' => [], 'HttpEnd' => [],
'LogLevel' => [], 'LogLevel' => [],
'LogWrite' => [], 'LogWrite' => [],
'UserLogin' => ['app\listener\UserLogin'],
'Message' => ['app\listener\Message'], 'Message' => ['app\listener\Message'],
'CommMsg' => ['app\listener\CommMsg'], 'CommMsg' => ['app\listener\CommMsg'],
], ],

16
app/event/UserLogin.php Normal file
View File

@ -0,0 +1,16 @@
<?php
declare (strict_types = 1);
namespace app\event;
//use app\common\model\User;
class UserLogin
{
public $name;
public $ip;
public function __construct($name,$ip)
{
$this->name = $name;
$this->ip = $ip;
}
}

View File

@ -23,6 +23,7 @@ class Index extends BaseController
public function index() public function index()
{ {
$types = input('type'); $types = input('type');
//幻灯 //幻灯
$slider = new \app\common\model\Slider(); $slider = new \app\common\model\Slider();
$sliders = $slider->getSliderList(); $sliders = $slider->getSliderList();

View File

@ -2,6 +2,7 @@
namespace app\index\Controller; namespace app\index\Controller;
use app\common\controller\BaseController; use app\common\controller\BaseController;
use app\common\lib\Msgres;
use app\common\validate\User as userValidate; use app\common\validate\User as userValidate;
use think\exception\ValidateException; use think\exception\ValidateException;
use think\facade\Db; use think\facade\Db;
@ -10,8 +11,9 @@ use think\facade\Session;
use think\facade\Cookie; use think\facade\Cookie;
use think\facade\Cache; use think\facade\Cache;
use think\facade\View; use think\facade\View;
use app\common\model\User as userModel; use app\common\model\User;
use taoler\com\Message; use taoler\com\Message;
use app\event\UserLogin;
class Login extends BaseController class Login extends BaseController
{ {
@ -32,15 +34,16 @@ class Login extends BaseController
Cookie::set('url',$url); Cookie::set('url',$url);
if(Request::isAjax()) { if(Request::isAjax()) {
//登陆前数据校验
$data = Request::param(); $data = Request::param();
//邮箱正则表达式 //邮箱正则表达式
$pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
//判断输入的是邮箱还是用户名 //判断输入的是邮箱还是用户名
if (preg_match($pattern, $data['name'])){ if (preg_match($pattern, $data['name'])){
//输入邮箱email登陆验证
$data['email'] = $data['name']; $data['email'] = $data['name'];
unset($data['name']); unset($data['name']);
//输入邮箱email登陆验证
try{ try{
validate(userValidate::class) validate(userValidate::class)
->scene('loginEmail') ->scene('loginEmail')
@ -63,13 +66,18 @@ class Login extends BaseController
} }
} }
//登陆请求 //登陆请求
$user = new \app\common\model\User(); $user = new User();
$res = $user->login($data); $res = $user->login($data);
if ($res == 1) { if ($res == 1) {
$ip = request()->ip();
$name = $data['name'];
//时间更新ip和日志
event(new UserLogin($name,$ip));
//获取系统站内通知信息 //获取系统站内通知信息
//Message::insertMsg(session('user_id')); //Message::insertMsg(session('user_id'));
//跳转到登陆前页面 //跳转到登陆前页面
return json(['code'=>0,'msg'=>'登陆成功','url'=> Cookie::get('url')]); //return json(['code'=>0,'msg'=>'登陆成功','url'=> Cookie::get('url')]);
return Msgres::success('login_success',Cookie::get('url'));
} else { } else {
return json(['code'=>-1,'msg'=>$res]); return json(['code'=>-1,'msg'=>$res]);
} }
@ -92,7 +100,7 @@ class Login extends BaseController
return json(['code'=>-1,'msg'=>$e->getError()]); return json(['code'=>-1,'msg'=>$e->getError()]);
} }
$user = new userModel; $user = new User();
$result = $user->reg($data); $result = $user->reg($data);
if ($result == 1) { if ($result == 1) {
@ -186,7 +194,7 @@ class Login extends BaseController
} }
$data['uid'] = Cache::get('userid'); $data['uid'] = Cache::get('userid');
$user = new \app\common\model\User(); $user = new User();
$res = $user->respass($data); $res = $user->respass($data);
if ($res == 1) { if ($res == 1) {
return json(['code'=>0,'msg'=>'修改成功','url'=>(string) url('login/index')]); return json(['code'=>0,'msg'=>'修改成功','url'=>(string) url('login/index')]);

View File

@ -11,6 +11,8 @@ return [
'delete' => 'delete', 'delete' => 'delete',
'edit' => 'edit', 'edit' => 'edit',
'uploads' => 'Upload', 'uploads' => 'Upload',
'login success' => 'login success',
'login error' => 'login error',
'add success' => 'add success!', 'add success' => 'add success!',
'add error' => 'add error', 'add error' => 'add error',
'edit success' => 'edit success', 'edit success' => 'edit success',
@ -85,6 +87,7 @@ return [
//Sign in/up //Sign in/up
'username' => 'Username', 'username' => 'Username',
'password' => 'Password', 'password' => 'Password',
'username or password error' => 'username or password error',
'new password' => 'New Password', 'new password' => 'New Password',
'reset password' => 'Reset password', 'reset password' => 'Reset password',
'retrieve password' => 'Retrieve password', 'retrieve password' => 'Retrieve password',

View File

@ -11,6 +11,8 @@ return [
'delete' => '删除', 'delete' => '删除',
'edit' => '编辑', 'edit' => '编辑',
'uploads' => '上传', 'uploads' => '上传',
'login success' => '登录成功',
'login error' => '登录失败',
'add success' => '添加成功!', 'add success' => '添加成功!',
'add error' => '添加失败', 'add error' => '添加失败',
'edit success' => '修改成功', 'edit success' => '修改成功',
@ -86,6 +88,7 @@ return [
//Sign in/up //Sign in/up
'username' => '用户', 'username' => '用户',
'password' => '密码', 'password' => '密码',
'username or password error' => '用户或密码错误',
'new password' => '新密码', 'new password' => '新密码',
'reset password' => '重置密码', 'reset password' => '重置密码',
'retrieve password' => '找回密码', 'retrieve password' => '找回密码',

View File

@ -2,18 +2,37 @@
return [ return [
//語言 //語言
'language' => 'language', 'language' => 'language',
'chinese' => '中文簡體', 'chinese' => '中文簡體',
'english' => 'English', 'english' => 'english',
//menu //彈窗提示消息
'index' => '首頁', 'add' => '添加',
'delete' => '刪除',
'edit' => '編輯',
'uploads' => '上傳',
'login success' => '登錄成功',
'login error' => '登錄失敗',
'add success' => '添加成功!',
'add error' => '添加失敗',
'edit success' => '修改成功',
'edit error' => '修改失敗',
'delete success' => '刪除成功',
'delete error' => '刪除失敗',
'upload success' => '上傳成功',
'upload error' => '上傳失敗',
'upgrade success' => '升級成功',
'upgrade error' => '升級失敗',
'illegal request' => '非法請求',
//菜單
'index' => 'index',
'home page' => '首頁', 'home page' => '首頁',
'user center' => '用戶中心', 'user center' => '用戶中心',
'set info' => '設置', 'set info' => '設置',
'my message' => '我的消息', 'my message' => '我的消息',
'my page' => '我的主頁', 'my page' => '我的主頁',
'login' => '登錄', 'login' => '登錄',
'logout' => '退出', 'logout' => '退出',
'sign in' => '簽到', 'sign in' => '簽到',
@ -22,54 +41,54 @@ return [
'discuss' => '討論', 'discuss' => '討論',
'case' => '案例', 'case' => '案例',
'timeline' => '框架日誌', 'timeline' => '框架日誌',
//帖子 //帖子
'poster' => '贴主', 'poster' => '貼主',
'title color' => '顏色', 'title' => '標題',
'add_post' => '添加帖子', 'title color' => '顏色',
'my collection' => '我的收藏', 'add post' => '添加帖子',
'cancel collection' => '取消收藏', 'edit post' => '編輯帖子',
'all' => '綜合', 'delete post' => '刪除帖子',
'finished' => '已結', 'post now' => '立即發布',
'end' => '已結', 'my collection' => '我的收藏',
'no finished' => '未結', 'cancel collection' => '取消收藏',
'hot' => '熱貼', 'all' => '綜合',
'top' => '精貼', 'finished' => '已結',
'cancel hoting' => '取消精貼', 'end' => '已結',
'cancel topping' => '取消置頂', 'no finished' => '未結',
'go sign' => '去簽到', 'hot' => '熱貼',
'more post' => '更多帖子', 'top' => '精貼',
'friendly link' => '友情鏈接', 'cancel hoting' => '取消精貼',
'reviewers list' => '回帖熱榜', 'cancel topping' => '取消置頂',
'hot post list' => '本周熱議', 'go sign' => '去簽到',
'links list' => '溫馨通道', 'more post' => '更多帖子',
'statement' => '說明', 'friendly link' => '友情鏈接',
'trends' => '動態', 'reviewers list' => '回帖熱榜',
'sponsor' => '鉆級贊助商', 'hot post list' => '本周熱議',
'i want to join' => '我要加入', 'links list' => '溫馨通道',
'official products' => '官方產品', 'statement' => '說明',
'no comments' => '暫時還沒有評論', 'trends' => '動態',
'submit comments' => '提交評論', 'sponsor' => '鉆級贊助商',
'reply' => '回復', 'i want to join' => '我要加入',
'replies' => '次回復', 'official products' => '官方產品',
'accept' => '采納', 'no comments' => '暫時還沒有評論',
'please input the content' => '請輸入內容', 'submit comments' => '提交評論',
'ads area' => '廣告區', 'reply' => '回復',
'enclosure' => '附件', 'replies' => '次回復',
'download files' => '下載文件', 'accept' => '采納',
'please input the content' => '請輸入內容',
//message 'ads area' => '廣告區',
'add' => '添加', 'enclosure' => '附件',
'delete' => '刪除', 'add attachment' => '添加附件',
'add success' => '添加成功!', 'download files' => '下載文件',
'add error' => '添加失敗', 'special column' => '選擇專欄',
'edit success' => '修改成功', 'tags' => '標簽',
'edit error' => '修改失敗', 'add tags' => '添加標簽',
'illegal request' => '非法請求',
//Sign in/up //Sign in/up
'username' => '用戶', 'username' => '用戶',
'password' => '密碼', 'password' => '密碼',
'username or password error' => '用戶或密碼錯誤',
'new password' => '新密碼', 'new password' => '新密碼',
'reset password' => '重置密碼', 'reset password' => '重置密碼',
'retrieve password' => '找回密碼', 'retrieve password' => '找回密碼',
@ -90,4 +109,20 @@ return [
'please input the password' => '請輸入密碼', 'please input the password' => '請輸入密碼',
'please confirm the password' => '請確認密碼', 'please confirm the password' => '請確認密碼',
'please input the captcha' => '請輸入驗證碼', 'please input the captcha' => '請輸入驗證碼',
//user
'add friends' => '添加為好友',
'start a chat' => '開始會話',
'authentication information' => '認證信息',
'it is not signed yet' => '懶得還沒有任何簽名',
'log in to view' => '登錄查看',
'join' => '加入',
'recent statements' => '最近發帖',
'recent answers' => '最近回貼',
'browses' => '瀏覽',
'in' => '在',
'accumulate points' => '積分',
'my post' => '我的帖子',
]; ];

View File

@ -0,0 +1,42 @@
<?php
declare (strict_types = 1);
namespace app\listener;
use think\facade\Db;
use think\facade\Log;
class UserLogin
{
/**
* 监听登陆记录IP和日志
* @param $user
* @throws \think\db\exception\DbException
*/
public function handle($user)
{
$name = $user->name;
$ip = $user->ip;
/*
$url = 'http://ip-api.com/json/'.$ip.'?lang=zh-CN';
//$url = 'http://ip-api.com/json/?lang=zh-CN';
$add = Api::urlGet($url);
if($add->status == 'success'){
$city = $add->city;
} else {
$city ='未知';
}
*/
Db::name('user')->where('name',$name)->update(
[
//'city' => $city,
'last_login_ip' => $user->ip,
'last_login_time' => time()
]
);
Log::channel('login')->info('login:{user} {ip}',['user'=>$name,'ip'=>$ip]);
}
}