久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

利用Laravel事件系統如何實現登錄日志的記錄詳解

這篇文章主要給大家介紹了利用Laravel事件系統如何實現登錄日志記錄的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

本文介紹的是利用Laravel事件系統實現登錄日志記錄的相關內容,分享出來給大家參考,下面來看看詳細的介紹:

明確需求

記錄一個登錄日志,通常需要下列信息:

  • 客戶端Agent信息
  • 客戶端IP地址
  • 訪問IP地點
  • 登錄時間
  • 登錄用戶信息

確立工具

明確完需求后,根據每個需求查找自己所需的工具吧。

  • 需求1 jenssegers/agent就可以滿足我們要求
  • 需求2 Laravel下直接Request::getClientIp()
  • 需求3 zhuzhichao/ip-location-zh這個包可以滿足要求
  • 需求4 time()
  • 需求5 登錄用戶模型

開工

采用Laravel的事件訂閱系統來實現,需要實現一個登錄事件和一個登錄事件監聽器。

生成事件和監聽器

Laravel命令行支持自動生成事件和監聽器,在App\Providers\EventServiceProvider中添加需要實現的事件:

protected $listen = [ 
  ...,
  //添加登錄事件及對應監聽器,一個事件可綁定多個監聽器
  'App\Events\LoginEvent' => [
  'App\Listeners\LoginListener',
 ],
];

運行命令:php artisan event:generate就會自動生成事件和監聽器,已存在的事件和監聽器不會發生改變。

登錄事件(Event)

回顧下需求,我們的登錄事件需要的5點信息,在事件中需要記錄這些信息,所以事件設計如下:

namespace App\Events;

use Illuminate\Broadcasting\Channel; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Broadcasting\PrivateChannel; 
use Illuminate\Foundation\Events\Dispatchable; 
use Illuminate\Broadcasting\InteractsWithSockets;

use App\Models\User; 
use Jenssegers\Agent\Agent;

class LoginEvent 
{
 use Dispatchable, InteractsWithSockets, SerializesModels;

 /**
 * @var User 用戶模型
 */
 protected $user;

 /**
 * @var Agent Agent對象
 */
 protected $agent;

 /**
 * @var string IP地址
 */
 protected $ip;

 /**
 * @var int 登錄時間戳
 */
 protected $timestamp;

 /**
 * 實例化事件時傳遞這些信息
 */
 public function __construct($user, $agent, $ip, $timestamp)
 {
 $this->user = $user;
 $this->agent = $agent;
 $this->ip = $ip;
 $this->timestamp = $timestamp;
 }

 public function getUser()
 {
 return $this->user;
 }

 public function getAgent()
 {
 return $this->agent;
 }

 public function getIp()
 {
 return $this->ip;
 }

 public function getTimestamp()
 {
 return $this->timestamp;
 }

 /**
 * Get the channels the event should broadcast on.
 *
 * @return Channel|array
 */
 public function broadcastOn()
 {
 return new PrivateChannel('channel-default');
 }
} 

在事件中記錄所需要的信息,并實現這些信息的get方法。

登錄監聽器(Listener)

在監聽器中,獲取到事件傳遞過來的信息,把這些信息記錄到數據庫中,實現如下:

namespace App\Listeners;

use App\Events\LoginEvent;

class LoginListener 
{

 // handle方法中處理事件
 public function handle(LoginEvent $event)
 {
 //獲取事件中保存的信息
 $user = $event->getUser();
 $agent = $event->getAgent();
 $ip = $event->getIp();
 $timestamp = $event->getTimestamp();

 //登錄信息
 $login_info = [
  'ip' => $ip,
  'login_time' => $timestamp,
  'user_id' => $user->id
 ];

 // zhuzhichao/ip-location-zh 包含的方法獲取ip地理位置
 $addresses = \Ip::find($ip);
 $login_info['address'] = implode(' ', $addresses);

 // jenssegers/agent 的方法來提取agent信息
 $login_info['device'] = $agent->device(); //設備名稱
 $browser = $agent->browser();  
 $login_info['browser'] = $browser . ' ' . $agent->version($browser); //瀏覽器
 $platform = $agent->platform();
 $login_info['platform'] = $platform . ' ' . $agent->version($platform); //操作系統
 $login_info['language'] = implode(',', $agent->languages()); //語言
 //設備類型
 if ($agent->isTablet()) {
  // 平板
  $login_info['device_type'] = 'tablet';
 } else if ($agent->isMobile()) {
  // 便捷設備
  $login_info['device_type'] = 'mobile';
 } else if ($agent->isRobot()) {
  // 爬蟲機器人
  $login_info['device_type'] = 'robot';
  $login_info['device'] = $agent->robot(); //機器人名稱
 } else {
  // 桌面設備
  $login_info['device_type'] = 'desktop';
 }

 //插入到數據庫
 DB::table('login_log')->insert($login_info);

 } 
}

這樣,監聽器就完成了,每次一觸發登錄事件,就會在數據庫中添加一條登錄信息。

觸發事件

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要給大家介紹了關于利用Homestead如何快速運行一個Laravel項目的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們
這篇文章主要給大家介紹了關于Laravel中Intervention/image圖片處理擴展包的安裝、使用與在使用可能遇到的坑的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一
這篇文章主要為大家詳細介紹了Laravel下生成驗證碼的類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
Laravel以其簡潔、優雅的特性贏得了大家的廣泛關注,無論是專家還是新手,在開發PHP項目的時候,都會第一時間的想到Laravel。本文我們將討論為什么Laravel會成為最成功的PHP框架
本篇文章主要介紹了Laravel 批量更新多條數據的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了laravel5 使用try catch的相關知識,需要的朋友可以參考下
主站蜘蛛池模板: 成人不卡在线 | 日韩中文字幕在线视频 | 久久一级 | 91一区二区三区 | 国产精品一二三区 | 国产精品久久久久久久久久久久 | www四虎com| 久久亚洲天堂 | 日韩成人在线免费视频 | 密色视频 | 国产91久久久久久 | 精品一二三区视频 | 免费污视频 | 日本久久福利 | 午夜电影网站 | 亚洲欧美日韩网站 | 在线免费观看欧美 | 91精品国产高清一区二区三区 | 欧美成人精品在线观看 | 久久国 | 久久精品伊人 | 国产精品成av人在线视午夜片 | 超碰在线播 | 欧美激情国产日韩精品一区18 | 91国产视频在线观看 | 久久99精品久久久久久噜噜 | 色一情一乱一伦一区二区三区 | 国产精品久久久久久久久久久免费看 | 国内精品久久久久久久影视简单 | 久久久久国产一级毛片高清网站 | 久久国产高清视频 | 日韩精品免费 | 美女在线一区二区 | 国产高清视频在线观看播放 | 我我色综合 | 久久精品成人一区 | 久久久一区二区三区 | 一二区成人影院电影网 | 狠狠综合久久av一区二区老牛 | 久久亚洲综合 | 国产一区二区在线播放视频 |