在登录Laravel之前执行特定操作

在登录Laravel之前执行特定操作,laravel,Laravel,我正在构建一个Laravel应用程序,其中包括限制用户可以登录的会话/设备的数量 我有3种类型的用户 基本的 家庭 夫妇 在我的users表中,我有一列no_of_logins,用于存储用户登录到的设备数量。我在用户登录时对该列执行增量函数 这就是我的控制器的样子 public function authenticated(Request $request,User $user) { if(Auth::check()) $previous_session = $user->

我正在构建一个Laravel应用程序,其中包括限制用户可以登录的会话/设备的数量

我有3种类型的用户

基本的 家庭 夫妇 在我的users表中,我有一列no_of_logins,用于存储用户登录到的设备数量。我在用户登录时对该列执行增量函数

这就是我的控制器的样子

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,
    ],
];