利用Laravel事件系统怎么实现登录日志的记录

  介绍

小编给大家分享一下利用Laravel事件系统怎么实现登录日志的记录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

利用Laravel事件系统实现登录日志记录的相关内容:

<强>明确需求

记录一个登录日志,通常需要下列信息:

<李>

客户端代理信息

<李>

客户端IP地址

<李>

访问IP地点

<李>

登录时间

<李>

登录用户信息

<强>确立工具

明确完需求后,根据每个需求查找自己所需的工具吧。

<李>

需求1 jenssegers/代理就可以满足我们要求

<李>

需求2 Laravel下直接<代码>要求::getClientIp()

<李>

需求3 zhuzhichao/ip-location-zh这个包可以满足要求

<李>

需求4次()

<李>

需求5登录用户模型

<强>开工

采用Laravel的事件订阅系统来实现,需要实现一个登录事件和一个登录事件监听器。

<强>生成事件和监听器

Laravel命令行支持自动生成事件和监听器,在App \提供者\ EventServiceProvider中添加需要实现的事件:

protected  listen 美元;=,(,   ,,…//才能添加登录事件及对应监听器,一个事件可绑定多个监听器   & # 39;才能应用\ \ LoginEvent& # 39;事件,=祝辞,(   & # 39;才能应用\听众\ LoginListener& # 39;   ,),   ];

运行命令:<代码> php工匠事件:生成代码>

<>强登录事件(事件)

回顾下需求,我们的登录事件需要的5点信息,在事件中需要记录这些信息,所以事件设计如下:

namespace 应用\事件;      use 照亮\广播\通道,   use 照亮\队列\ SerializesModels,   use 照亮\广播\ PrivateChannel,   use 照亮\基础\ \可分派事件,   use 照亮\ \ InteractsWithSockets广播;      use 应用\ \用户模型,   use  Jenssegers \代理\代理;      class  LoginEvent    {   ,use 可分派,InteractsWithSockets,, SerializesModels;/* *   ,* @var  User 用户模型   ,*/美元,protected 用户;/* *   ,* @var  Agent 代理对象   ,*/美元,protected 代理;/* *   ,* @var  string  IP地址   ,*/美元,protected 知识产权;/* *   ,* @var  int 登录时间戳   ,*/美元,protected 时间戳;/* *   ,*实例化事件时传递这些信息   ,*/,public  function  __construct($用户,代理,美元,ip,美元,美元的时间戳)   ,{   ,$ this→user =, $用户;   ,$ this→agent =,代理美元;   ,$ this→ip =, $ ip;   ,$ this→timestamp =, $时间戳;   ,}      ,public  function  getUser ()   ,{   ,return  $ this→用户;   ,}      ,public  function  getAgent ()   ,{   ,return 美元这→代理;   ,}      ,public  function  getIp ()   ,{   ,return 这比美元;知识产权;   ,}      ,public  function  getTimestamp ()   ,{   ,return 美元这→时间戳;   ,}/* *   ,* Get 从而channels 从而event  should  broadcast 。   ,*   ,* @return 频道|数组   ,*/,public  function 联欢()   ,{   ,return  new  PrivateChannel (& # 39; channel-default& # 39;);   ,}   }

在事件中记录所需要的信息,并实现这些信息的得到方法。

<>强登录监听器(听众)

在监听器中,获取到事件传递过来的信息,把这些信息记录到数据库中,实现如下:

namespace 应用\听众;      use 应用\ \ LoginEvent事件;      class  LoginListener    {      ,//处理方法中处理事件   ,public  function 处理(LoginEvent 事件美元)   ,{   ,//获取事件中保存的信息   美元,美元user =,事件→getUser ();   美元,美元agent =,事件→getAgent ();   美元,美元ip =,事件→getIp ();   美元,美元timestamp =,事件→getTimestamp ();      ,//登录信息   ,login_info 美元;=,(   & # 39;才能ip # 39;,=祝辞,ip美元,   & # 39;才能login_time& # 39;,=祝辞,时间戳,美元   & # 39;才能user_id # 39;,=在$ user→id   ,);      ,//zhuzhichao/ip-location-zh 包含的方法获取ip地理位置=,美元addresses  \ Ip:找到(Ip);   ,$ login_info[& # 39;地址# 39;],=,内爆(& # 39;,& # 39;,,美元地址);      ,//jenssegers/agent 的方法来提取代理信息   ,$ login_info[& # 39;设备# 39;],=,美元剂→设备();,//设备名称   美元,美元browser =,代理→浏览器();,,   ,$ login_info[& # 39;浏览器# 39;],=,browser 美元;只& # 39;,& # 39;,只代理→美元版本(浏览器)美元;,//浏览器   美元,美元platform =,代理→平台();   ,$ login_info[& # 39;平台# 39;],=,platform 美元;只& # 39;,& # 39;,只代理→美元版本(平台)美元;,//操作系统   ,$ login_info[& # 39;语言# 39;],=,内爆(& # 39;& # 39;,,美元剂→语言());,//语言   ,//设备类型   美元,if (代理→isTablet ()), {//,才能平板   美元才能login_info [& # 39; device_type& # 39;],=, & # 39;平板# 39;;   ,}else  if (代理→美元isMobile ()), {//才能,便捷设备   美元才能login_info [& # 39; device_type& # 39;],=, & # 39;移动# 39;;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

利用Laravel事件系统怎么实现登录日志的记录