在登录Laravel之前执行特定操作
我正在构建一个Laravel应用程序,其中包括限制用户可以登录的会话/设备的数量 我有3种类型的用户 基本的 家庭 夫妇 在我的users表中,我有一列no_of_logins,用于存储用户登录到的设备数量。我在用户登录时对该列执行增量函数 这就是我的控制器的样子在登录Laravel之前执行特定操作,laravel,Laravel,我正在构建一个Laravel应用程序,其中包括限制用户可以登录的会话/设备的数量 我有3种类型的用户 基本的 家庭 夫妇 在我的users表中,我有一列no_of_logins,用于存储用户登录到的设备数量。我在用户登录时对该列执行增量函数 这就是我的控制器的样子 public function authenticated(Request $request,User $user) { if(Auth::check()) $previous_session = $user->
public function authenticated(Request $request,User $user)
{
if(Auth::check())
$previous_session = $user->session_id;
$login = $user->no_of_logins;
{ //check if the user is logged in or not
$user = Auth::user();
if ($user->isCouple())
{
if ($login > 2)
{
Auth::logout();
session()->flash('logout', "You are Logged in on other devices");
return redirect('login');
}
else
{
Auth::user()->session_id = \Session::getId();
Auth::user()->no_of_logins++;
Auth::user()->save();
}
return redirect(route('welcome'));
}
elseif ($user->isFamily())
{
if ($login > 4)
{
Auth::logout();
session()->flash('logout', "You are Logged in on other devices");
return redirect('login');
}
else
{
Auth::user()->session_id = \Session::getId();
Auth::user()->no_of_logins++;
Auth::user()->save();
}
return redirect(route('welcome'));
}
elseif ($user->isBasic())
{
if ($login > 1)
{
Auth::logout();
session()->flash('logout', "You are Logged in on other devices");
return redirect('login');
}
else
{
// Auth::user()->session_id = \Session::getId();
Auth::user()->no_of_logins++;
Auth::user()->save();
}
return redirect(route('welcome'));
}
else
{
return redirect(route('welcome'));
}
}
}
这个代码对我有用。我不知道这是不是一个完美的方法
但是,我有一个拦截器。当用户注销时
我希望能够在用户注销时减少不登录次数
我试图通过这样做在我的控制器中创建一个方法
public function logout(Request $request)
{
if(Auth::logout())
{
// $user = Auth::user();
$login = $user->no_of_logins;
Auth::user()->no_of_logins--;
Auth::user()->save();
}
return redirect('/login');
}
这不会减少no_of_logins列
我知道这行不通。有谁能推荐我怎么做。我读了一些博客和文章。我正在阅读使用Laravel事件的内容,但我不明白Laravel事件是如何工作的注销时从SessionGuard触发的事件是Illumb\Auth\Events\Logout。您可以设置侦听器来侦听此事件并执行所需的操作。这是在他们注销之后,而不是之前
在app/Listeners/LoggedOutListener.php创建一个文件:
注销时从SessionGuard触发的事件为Illumb\Auth\Events\Logout。您可以设置侦听器来侦听此事件并执行所需的操作。这是在他们注销之后,而不是之前
在app/Listeners/LoggedOutListener.php创建一个文件:
<?php
namespace App\Listeners
use Illuminate\Auth\Events\Logout;
class LoggedOutListener
{
public function handle(Logout $event)
{
$event->user->decrement('no_of_logins');
}
}
use App\Listeners\LoggedOutListener;
use Illuminate\Auth\Events\Logout;
protected $listen = [
...
Logout::class => [
LoggedOutListener::class,
],
];