app/Models/Concerns/HasSessions.php
<?php
namespace App\Models\Concerns;
use hisorange\BrowserDetect\Parser;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
trait HasSessions
{
public function getSessions()
{
return collect(
DB::connection(config('session.connection'))->table(config('session.table', 'sessions'))
->where('user_id', $this->getAuthIdentifier())
->orderBy('last_activity', 'desc')
->get()
)->map(function ($session) {
return (object) [
'agent' => $this->createAgent($session),
'ip_address' => $session->ip_address,
'is_current_device' => $session->id === request()->session()->getId(),
'last_active' => Carbon::createFromTimestamp($session->last_activity)->diffForHumans(),
];
});
}
protected function createAgent($session)
{
$request = (new Request)->headers->set('User-Agent', $session->user_agent);
return new Parser(null, $request, []);
}
}