不能跟踪,计数用户在Laravel的登录


Can't track, count logins of a user in Laravel

我想计算一个用户使用Laravel中的Events登录了多少次。

我已经定义了这个事件:

<?php namespace App'Handlers'Events;
use Illuminate'Queue'InteractsWithQueue;
use Illuminate'Contracts'Queue'ShouldBeQueued;
use App'User;
use Illuminate'Support'Facades'Log;
class AuthLoginEventHandler {
    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
    /**
     * Handle the event.
     *
     * @param  User $user
     * @param  $remember
     * @return void
     */
    public function handle(User $user, $remember)
    {
        Log::info('Logged in');
        $user->login_counter = 1;
        $user->save();
        $user->increment('login_counter');
    }
}

和在EventServiceProvider中我有以下内容:

<?php namespace App'Providers;
use Illuminate'Contracts'Events'Dispatcher as DispatcherContract;
use Illuminate'Foundation'Support'Providers'EventServiceProvider as ServiceProvider;
use Illuminate'Support'Facades'Event;
use Illuminate'Support'Facades'Log;
class EventServiceProvider extends ServiceProvider {
    /**
     * The event handler mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'auth.login' => [
            'App'Handlers'Events'AuthLoginEventHandler'
        ]
    ];
    /**
     * Register any other events for your application.
     *
     * @param  'Illuminate'Contracts'Events'Dispatcher  $events
     * @return void
     */
    public function boot(DispatcherContract $events)
    {
        parent::boot($events);
        //
    }
}
更新:

我已经覆盖了从trait到AuthController的postLogin():

<?php namespace App'Http'Controllers'Auth;
use App'Http'Controllers'Controller;
use Illuminate'Contracts'Auth'Guard;
use Illuminate'Contracts'Auth'Registrar;
use Illuminate'Foundation'Auth'AuthenticatesAndRegistersUsers;
    class AuthController extends Controller {
        use AuthenticatesAndRegistersUsers;
        /**
         * Create a new authentication controller instance.
         *
         * @param  'Illuminate'Contracts'Auth'Guard  $auth
         * @param  'Illuminate'Contracts'Auth'Registrar  $registrar
         * @return void
         */
        public function __construct(Guard $auth, Registrar $registrar)
        {
            $this->auth = $auth;
            $this->registrar = $registrar;
            $this->middleware('guest', ['except' => 'getLogout']);
        }

        public function postLogin(Request $request)
        {
            $this->validate($request, [
                'email' => 'required|email', 'password' => 'required',
            ]);
            $credentials = $request->only('email', 'password');
            if ($this->auth->attempt($credentials, $request->has('remember')))
            {
                Log::info('Logged in User from AuthController');
                return redirect()->intended($this->redirectPath());
            }
            return redirect($this->loginPath())
                ->withInput($request->only('email', 'remember'))
                ->withErrors([
                    'email' => $this->getFailedLoginMessage(),
                ]);
        }
    }

这在我的Laravel 5.0上不起作用,我不知道为什么,除了使用事件之外,还有其他的方法来计算用户的登录吗?

我正在检查日志,当我尝试Log::info('Logged in')时,没有任何东西进来;在boot方法中,它涉及到日志。

首先,由于您在Provider中添加了一些内容,因此需要清除先前编译的源代码(缓存以加快加载时间)。

$ php artisan clear-compiled
其次,你的代码有计数问题,
    $user->login_counter = 1;  <-- set count to 1 ??
    $user->save(); <--- then SAVE?
    $user->increment('login_counter'); <--- INCREMENT for what?

应该是这样的

    $user->login_counter += 1;
    $user->save();

确保在迁移中您拥有login_counter的默认(初始)值

$table->integer('login_counter')->unsigned()->default(0);

然后它就工作了!