私は現在、Laravel(5.3)上にアプリケーションを作成しており、ログインしているすべてのユーザーの一覧が必要です。私はもともとそれらをMySQLに格納しようとしていましたが、Redisがその仕事のためにより良いとアドバイスされました。 Redisのドキュメントを見ると、すべてのユーザーを1組にして保存するつもりだったが、個々のメンバーの有効期限を設定することができず、代わりに名前空間の文字列が選択されていた。LaravelとRedisにログインしているすべてのユーザーを一覧表示するには?
私は正しく機能していると信じているコードを書いていますが、それを改善するためのアドバイスがあります。
だからまず、ここで私はLoginController.php
に追加した2つの機能// Overriding the authenticated method from Illuminate\Foundation\Auth\AuthenticatesUsers
protected function authenticated(Request $request, $user)
{
$id = $user->id;
// Getting the expiration from the session config file. Converting to seconds
$expire = config('session.lifetime') * 60;
// Setting redis using id as namespace and value
Redis::SET('users:'.$id,$id);
Redis::EXPIRE('users:'.$id,$expire);
}
//Overriding the logout method from Illuminate\Foundation\Auth\AuthenticatesUsers
public function logout(Request $request)
{
// Deleting user from redis database when they log out
$id = Auth::user()->id;
Redis::DEL('users:'.$id);
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
次がある私は、ミドルウェアと呼ばれる書いた「RefreshRedis」Redisの上の有効期限を更新するために、ユーザが自分をリフレッシュする何かをするときセッション。
public function handle($request, Closure $next)
{
//refreshing the expiration of users key
if(Auth::check()){
$id = Auth::user()->id;
$expire = config('session.lifetime') * 60;
Redis::EXPIRE('users:'.$id,$expire);
}
return $next($request);
}
は、私はその後、私はthisスレッドで見つかった機能の修正版を使用するすべてのユーザーの一覧を取得するためには、単にのstartSessionミドルウェア
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\RefreshRedis::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
後$ middlewareGroupsでミドルウェアを登録しました。
ユーザーのセッションの有効期限が切れると、自動的にログインが失効します。したがって、このロジックを実装する理由はありません。 これを 'config/session.php'で' 'lifetime '=> 120'に設定することができます。デフォルトは2時間です – WebKenth
待機中、このロジックなしで現在ログインしているすべてのユーザのリストを取得するには? – Dalek
アクティブユーザーのリストを作成することはできませんが、体験学習ロジックを書く必要はないと言っているだけではありません。ユーザーがログインするときにユーザーを追加するだけで、セッションが終了したときにユーザーを削除するだけで、いつでもリストを照会してアクティブユーザーになることができます。 – WebKenth