Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update RedirectIfNotAuthenticated.stub #117

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

roydebangshu
Copy link
Contributor

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.

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 guard i.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
first visit domain.test/home [ user home page, don't login]
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.
@roydebangshu roydebangshu marked this pull request as ready for review June 12, 2020 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant