Online Status
This packages adds functionality to show user online status, online users and online user number in your laravel app. This package can be used in laravel 5.5 or higher., (*1)
Installation
This packages uses redis behind the screen. So please install redis in your machine in order to use package., (*2)
composer require zaichaopan/online-status
Usage
- Add HasOnlineStatus trait to your user model
//...
use Zaichaopan\OnlineStatus\HasOnlineStatus;
class User extends Model
{
use HasOnlineStatus;
}
- Set online expiration time.
This package uses lifetime in config/session.php as the default user online expiration time. If user remains inactive during this time period, he or she will be considered offline. So if you want to customize. you can override it in config/session.php or you can override it in User model as follow, (*3)
// ...
class User extends Model
{
use HasOnlineStatus;
public static function getOnlineExpirationInMinutes(): int
{
return 10;
}
}
- Apply UserOnline Middleware.php
// App\Http\Kernel.php
class Kernel extends HttpKernel
{
// ...
protected $middlewareGroups = [
'web' => [
\\...
\Zaichaopan\OnlineStatus\Middleware\UserOnline::class
],
//...
];
}
Now when authenticated user makes a web request, his or her online status will be automatically be set., (*4)
//
class UserOnline
{
// ...
public function handle(Request $request, Closure $next)
{
optional($request->user())->online();
return $next($request);
}
}
Available Apis
- Get whether user is online:
$status = $user->isOnline;
// or
$status = $user->isOnline();
- Get total online user number
$onlineUserCount = User::onlineCount();
$onlineUsers = User::ofOnline()->get();
// or
$onlineUsers = User::ofOnline()->paginate();
As long as you apply the UserOnline middleware properly, it will automatically set and update authenticated user online status. In case you want to set it manually, you can use online method provided by the trait., (*5)
$user->online();
This package listens for Logout event. When user logs out, it will set user online status as offline. In case you may want to set user offline manually, you can use offline method provided by the trait., (*6)
$use->offline();
Events
This packages raises two events during the updating user online status process. You may attach listeners to these two events in your EventServiceProvider:, (*7)
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Zaichaopan\OnlineStatus\Events\Online' => [
'App\Listeners\Online',
],
'Zaichaopan\OnlineStatus\Events\Offline' => [
'App\Listeners\Offline',
]
];
The Online event will only fire once. It won't fire again if the user is already online, (*8)