php - Can't track, count logins of a user in Laravel -
i count how many times user has been logged in using events in laravel.
i have event defined:
<?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 event handler. * * @return void */ public function __construct() { // } /** * handle 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'); } }
and in eventserviceprovider have following:
<?php namespace app\providers; use illuminate\contracts\events\dispatcher dispatchercontract; use illuminate\foundation\support\providers\eventserviceprovider serviceprovider; use illuminate\support\facades\event; use illuminate\support\facades\log; class eventserviceprovider extends serviceprovider { /** * event handler mappings application. * * @var array */ protected $listen = [ 'auth.login' => [ 'app\handlers\events\authlogineventhandler' ] ]; /** * register other events application. * * @param \illuminate\contracts\events\dispatcher $events * @return void */ public function boot(dispatchercontract $events) { parent::boot($events); // } }
update:
i have override postlogin() trait authcontroller as:
<?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 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 authcontroller'); return redirect()->intended($this->redirectpath()); } return redirect($this->loginpath()) ->withinput($request->only('email', 'remember')) ->witherrors([ 'email' => $this->getfailedloginmessage(), ]); } }
this not working on laravel 5.0, dont know why, there other alternative count logins of user other using events?
i checking logs , there nothing comming in, when try log::info('logged in'); within boot method, comes logs.
first thing, because have added provider, need clear previous compiled source (which cached speed loading time).
$ php artisan clear-compiled
secondly, code has counting problem,
$user->login_counter = 1; <-- set count 1 ?? $user->save(); <--- save? $user->increment('login_counter'); <--- increment what?
instead, should this
$user->login_counter += 1; $user->save();
make sure in migration have default (initial) value login_counter
$table->integer('login_counter')->unsigned()->default(0);
then works!
Comments
Post a Comment