Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Laravel5.5で未認証時にリダイレクトさせる処理

More than 1 year has passed since last update.

環境

  • Laravel5.5
  • multi auth

やりたいこと

Multi auth を使っている前提で、未認証時にユーザ・管理者それぞれのログインページにリダイレクトさせたい。

5.4 までは app/Exceptions/Handler.php に直書きされていた

5.4 では、app/Exceptions/Handler.php に unauthenticated メソッドがありました。

namespace App\Exceptions;

use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    .
    .
    .
    /**
     * Convert an authentication exception into an unauthenticated response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Auth\AuthenticationException  $exception
     * @return \Illuminate\Http\Response
     */
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        return redirect()->guest(route('login'));
    }
}

これが、5.5 では初期状態では書かれていません。
vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
こちらにあるようです。
どっちにしても、 app/Exceptions/Handler.php 内で unauthenticated をオーバーライドします。

namespace App\Exceptions;

use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    .
    .
    .
    /**
     * 認証していない場合にガードを見てそれぞれのログインページへ飛ばず
     *
     * @param \Illuminate\Http\Request $request
     * @param AuthenticationException $exception
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
     */
    public function unauthenticated($request, AuthenticationException $exception)
    {
        if($request->expectsJson()){
            return response()->json(['message' => $exception->getMessage()], 401);
        }

        if (in_array('admin', $exception->guards())) {
            return redirect()->guest(route('admin.login'));
        }

        return redirect()->guest(route('user.login'));
    }
}

参考

▼Laravel 5.5 change unauthenticated login redirect url
https://stackoverflow.com/questions/45340855/laravel-5-5-change-unauthenticated-login-redirect-url
▼[Laravel] 5.3でMulti-Authを使う
http://www.84kure.com/blog/2016/06/06/laravel-5-3%E3%81%A7multi-auth%E3%82%92%E4%BD%BF%E3%81%86/

binthec
PHPer。ぽんこつです。 CakePHP2〜4系がメイン。Laravelもちょっと。最近は CakePHP3 〜 4 ばっかり触ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away