I want to check user type when they log in and apply function
In my middleware
, I have this code
JavaScript
x
public function handle($request, Closure $next)
{
$user = Auth::user();
if ($user->isBasic()) {
$previous_session = $user->session_id;
if ($previous_session) {
Session::getHandler()->destroy($previous_session);
}
Auth::user()->session_id = Session::getId();
Auth::user()->save();
return redirect(route('home'));
}
return $next($request);
}
In my User model
, I have this
JavaScript
public function isBasic()
{
return $this->role=='basic';
}
I have already registered the middleware in Kernel
JavaScript
'basic' => AppHttpMiddlewareCheckSession::class,
And I passed it to my LoginController like this
JavaScript
public function __construct()
{
$this->middleware('basic');
}
But when it tried to visit the login controller, it says
Call to a member function isBasic() on null
I am a beginner in Laravel and I don’t know what to do
Advertisement
Answer
This seems like a good candidate for the authenticated
method of the LoginController
which gets called after a user has logged in.
JavaScript
use IlluminateHttpRequest;
/**
* The user has been authenticated.
*
* @param IlluminateHttpRequest $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
if ($user->isBasic()) {
$previous_session = $user->session_id;
if ($previous_session) {
$request->session()->getHandler()->destroy($previous_session);
}
$user->session_id = $requset->session()->getId();
$user->save();
// do these specific users need to be redirected to somewhere special?
return redirect()->route('home');
}
}
You could even listen for the Auth events if you wanted to, as long as its not a queued listener.