web-dev-qa-db-ja.com

Laravel 5.5認証されていないログインリダイレクトURLを変更

Laravel < 5.5で、このファイルapp/Exceptions/Handlerを変更して、認証されていないユーザーリダイレクトURLを変更できます。

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

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

しかし、Laravel 5.5では、これはこの場所vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.phpに移動されました。今すぐ変更するにはどうすればよいですか? composerの更新によって上書きされる場合を除き、ベンダーディレクトリの内容を変更したくありません。

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => 'Unauthenticated.'], 401)
                : redirect()->guest(route('login'));
}
32
Rob

しかし、Laravel 5.5では、これはこの場所に移動されましたvendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.phpどうすれば変更できますか? composerの更新によって上書きされる場合を除き、ベンダーディレクトリの内容を変更したくありません。

関数がデフォルトでもう存在しないというだけです。

5.4で行ったように、単にオーバーライドできます。必ず含めてください

use Exception;
use Request;
use Illuminate\Auth\AuthenticationException;
use Response;

ハンドラファイル内。

たとえば、私のapp/Exceptions/Handler.phpは次のようになります。

<?php
    namespace App\Exceptions;
    use Exception;
    use Request;
    use Illuminate\Auth\AuthenticationException;
    use Response;
    use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
    class Handler extends ExceptionHandler
    {
        (...) // The dfault file content
        /**
         * Convert an authentication exception into a response.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Illuminate\Auth\AuthenticationException  $exception
         * @return \Illuminate\Http\Response
         */
         protected function unauthenticated($request, AuthenticationException $exception)
         {
            return $request->expectsJson()
                    ? response()->json(['message' => 'Unauthenticated.'], 401)
                    : redirect()->guest(route('authentication.index'));
    }
}
56
Seb. Kra.

解決方法は次のとおりです。レンダリング関数で、例外クラスをキャッチしました。また、認証例外クラスの場合、リダイレクト用のコード(以前のバージョンでは認証されていない関数で記述するコード)を作成しました。

public function render($request, Exception $exception)
{
    $class = get_class($exception);

    switch($class) {
        case 'Illuminate\Auth\AuthenticationException':
            $guard = array_get($exception->guards(), 0);
            switch ($guard) {
                case 'admin':
                    $login = 'admin.login';
                    break;
                default:
                    $login = 'login';
                    break;
            }

            return redirect()->route($login);
    }

    return parent::render($request, $exception);
}
18
Milomir

しかし、Laravel 5.5では、これはこの場所に移動されましたvendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.phpどうすれば変更できますか? composerの更新によって上書きされる場合を除き、ベンダーディレクトリの内容を変更したくありません。

Use Illuminate\Auth\AuthenticationExceptionを含めるだけです。

laravel 5.4のように動作します

5
LetsCMS Pvt Ltd

標準の例外ハンドラは名前付きルートを使用します。

そのため、その名前を使用するようにルートを定義するだけです。

したがって、routes/web.phpファイルに次の行を追加するだけです。

Route::get('mylogin', 'MyLoginController@showLoginForm')->name('login');

name('login')ビットはこのルートに名前を付けるため、認証されていない例外はこのルートを使用します。

独自の例外ハンドラを作成したり、標準の例外ハンドラを変更したりする必要はありません。

定型的な「auth」コードで使用される名前付きルートは、vendor/laravel/framework/src/Illuminate/Routing/Router.phpファイルのauth()関数にあります。 (ログイン、ログアウト、登録、password.request、password.email、password.reset)。これらのルートは、ルートファイルでRoute::auth();行を使用すると追加されます。

2
pscs

Routesファイルにログイン用のルートを追加するだけです:

Route::get('/login', [
   'uses' => 'UserController@getSignin',
   'as' => 'login'
]);
0
zardox