登录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 = [
'success' => 0,
'error' => 1,
'login_success' => Lang::get('login success'),
'login_error' => Lang::get('login error'),
'add_success' => Lang::get('add success'),
'add_error' => Lang::get('add error'),
'edit_success' => Lang::get('edit success'),

View File

@ -43,8 +43,8 @@ class User extends Model
//登陆校验
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加密再进行数据库的查询
$salt = substr(md5($user['create_time']),-6);
@ -64,26 +64,6 @@ class User extends Model
//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表示有用户用户名密码正确
return 1;
}else{
@ -91,6 +71,12 @@ class User extends Model
}
}
//更新数据
public function updata($data)
{
//dump($data);
}
//注册校验
public function reg($data)
{

View File

@ -2,6 +2,7 @@
// 事件定义文件
return [
'bind' => [
'UserLogin' => 'app\event\UserLogin',
'Message' => 'app\event\Message',
],
@ -11,6 +12,7 @@ return [
'HttpEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
'UserLogin' => ['app\listener\UserLogin'],
'Message' => ['app\listener\Message'],
'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()
{
$types = input('type');
//幻灯
$slider = new \app\common\model\Slider();
$sliders = $slider->getSliderList();

View File

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

View File

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

View File

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

View File

@ -4,10 +4,29 @@ return [
//語言
'language' => 'language',
'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' => '首頁',
'user center' => '用戶中心',
'set info' => '設置',
@ -24,9 +43,13 @@ return [
'timeline' => '框架日誌',
//帖子
'poster' => '贴主',
'poster' => '貼主',
'title' => '標題',
'title color' => '顏色',
'add_post' => '添加帖子',
'add post' => '添加帖子',
'edit post' => '編輯帖子',
'delete post' => '刪除帖子',
'post now' => '立即發布',
'my collection' => '我的收藏',
'cancel collection' => '取消收藏',
'all' => '綜合',
@ -56,20 +79,16 @@ return [
'please input the content' => '請輸入內容',
'ads area' => '廣告區',
'enclosure' => '附件',
'add attachment' => '添加附件',
'download files' => '下載文件',
//message
'add' => '添加',
'delete' => '刪除',
'add success' => '添加成功!',
'add error' => '添加失敗',
'edit success' => '修改成功',
'edit error' => '修改失敗',
'illegal request' => '非法請求',
'special column' => '選擇專欄',
'tags' => '標簽',
'add tags' => '添加標簽',
//Sign in/up
'username' => '用戶',
'password' => '密碼',
'username or password error' => '用戶或密碼錯誤',
'new password' => '新密碼',
'reset password' => '重置密碼',
'retrieve password' => '找回密碼',
@ -90,4 +109,20 @@ return [
'please input the password' => '請輸入密碼',
'please confirm the password' => '請確認密碼',
'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]);
}
}