bitfumes / laravel-multiauth

Multi Auth and admin auth in Laravel Project
MIT License
470 stars 105 forks source link

Update RedirectIfNotAuthenticated.stub #117

Open roydebangshu opened 4 years ago

roydebangshu commented 4 years ago

This change is to make the MultiAuth system compatible with Laravel default Authentication process and to behave identical as "web guard" or "User Model".

Actually there is a little problem if we use

public function handle($request, Closure $next, $guard = 'student')
    {
        if (!Auth::guard($guard)->check()) {

            return redirect('student\login');
        }

        return $next($request);
     }

as it is not go through the following method in

//Illuminate\Foundation\Exceptions\Handler.php;

/**
     * Convert an authentication exception into a response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Auth\AuthenticationException  $exception
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        return $request->expectsJson()
                    ? response()->json(['message' => $exception->getMessage()], 401)
                    : redirect()->guest($exception->redirectTo() ?? route('login'));
    }

in this method redirect()->guest() play a role to set Intended Url $this->setIntendedUrl($intended); .

So, for your newly created guardi.e. "student"if you not go through $this->setIntendedUrl($intended); in "unauthenticated" situation then after authentication rather than redirect to "student dashboard" it will redirect to previously set Indented Url.

To understand this you can check it. Do the following....

  • Two guards - User(web/default) and student

  • in logout condition

    1. first visit domain.test/home [ user home page, don't login]
    2. then visit domain.test/student [student dashboard and do login in student]
    • after student successful login it will redirect to domain.test/login instead of domain.test/student.
This change has no direct impact on usability, it just modify the internal mechanism of authentication via middleware.