Laravel 5.5 modifier l'url de redirection de connexion non authentifiée

Laravel < 5.5 je pourrais changer ce fichier app/Exceptions/Handler pour changer l'utilisateur non authentifié url de redirection:

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

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

Mais Laravel 5.5 c'est ce qui a été déplacé à cet endroit vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php alors, comment puis-je le changer maintenant? Je ne veux pas changer des trucs dans le répertoire des fournisseurs. il est bloqué par les mises à jour des compositeurs.

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => 'Unauthenticated.'], 401)
                : redirect()->guest(route('login'));
}
24
demandé sur robertmylne 2017-07-27 06:26:29
la source

8 ответов

Mais dans Laravel 5.5 ce qui a été déplacé à cet endroit vendor/laravel/cadre/src/Éclairer/Fondation/Exceptions/Gestionnaire.php alors, comment puis-je le changer maintenant? Je ne veux pas changer des trucs dans le répertoire des fournisseurs. il est bloqué par les mises à jour des compositeurs.

c'est juste le cas que la fonction n'est plus là par défaut.

Vous pouvez simplement le remplacer comme vous l'avez fait dans 5.4. Juste assurez-vous d'inclure

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

dans le Gestionnaire de fichier.

par exemple mon app/Exceptions/Handler.php regarde un peu comme ceci:

<?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'));
    }
}
44
répondu Seb. Kra. 2017-09-01 10:38:13
la source

Voici comment je l'ai résolu. Dans la fonction de rendu, j'ai pris la classe exception. Et dans le cas où c'est la classe D'Exception D'authentification j'ai écrit mon code pour rediriger (le code que j'écrirais dans la fonction non authentifiée dans la version précédente).

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);
}
11
répondu Milomir 2017-08-30 22:44:45
la source

mais dans Laravel 5.5 ceci a été déplacé à cet endroit vendeur/laravel/cadre/src/Éclairer/Fondation/Exceptions/Gestionnaire.php alors, comment puis-je le changer maintenant? Je ne veux pas changer les choses dans le vendeur les mises à jour de composer l'empiètent sur le répertoire.

nous devons simplement inclure utiliser Illuminate\Auth\AuthenticationException;

et puis ça marche comme dans laravel 5.4

4
répondu LetsCMS 2017-09-12 16:30:39
la source

le gestionnaire d'exception standard utilise une route nommée.

Donc, vous définissez votre itinéraire pour utiliser ce nom.

Donc, dans votre routes/web.php le fichier, il suffit d'ajouter la ligne:

Route::get('mylogin', '[email protected]')->name('login');

name('login') bit donne un nom à cette route, donc l'exception non authentifiée utilisera cette route.

vous n'avez pas besoin de vous embêter à créer votre propre gestionnaire d'exception, ou à modifier le gestionnaire d'exception standard.

les routes nommées utilisées par le le code 'auth' de boilerplate peut être trouvé dans le vendor/laravel/framework/src/Illuminate/Routing/Router.php fichier,auth() fonction. (la connexion, la déconnexion, le registre, le mot de passe.demande de mot de passe.e-mail et mot de passe.réinitialiser.) Ces itinéraires sont ajoutés lorsque vous utilisez le Route::auth(); ligne dans le fichier route.

2
répondu pscs 2018-09-22 23:04:50
la source

Autre que overriding, Vous pouvez directement faire des changements dans Handler.php pour la fonction non authentifié situé à vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php pour rediriger vers la route prévue en fonction des gardes.

/**
 * 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)
{


    $guard = array_get($exception->guards(),0);
    switch ($guard) {
        case 'admin':
            return $request->expectsJson()
                        ? response()->json(['message' => $exception->getMessage()], 401)
                        : redirect()->guest(route('admin.login'));
            break;

        default:
            return $request->expectsJson()
                        ? response()->json(['message' => $exception->getMessage()], 401)
                        : redirect()->guest(route('login'));
            break;
    }
}
0
répondu Tekraj Chhetri 2018-01-29 15:32:38
la source

il suffit D'ajouter une route pour se connecter dans le fichier routes:

Route::get('/login', [
   'uses' => '[email protected]',
   'as' => 'login'
]);
0
répondu zardox 2018-02-02 15:49:01
la source

remplacer votre appli\Exceptions\Handler.code php avec ce qui suit....

<?php

namespace App\Exceptions;

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

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.`enter code here`
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

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


        $guard = array_get($exception->guards(),0);
        switch ($guard) {
            case 'admin':
                $login = 'admin.login';
                break;

            default:
                $login = 'login';
                break;
        }

        return redirect()->guest(route($login));
    }
}
0
répondu Waheed Shahzad 2018-07-28 05:56:07
la source

1.Accédez à vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php fichier.

2.Recherche le nom de la méthode est unauthenticated.

3.Et changer l'url de redirection de redirect()->guest(route('login'))redirect()->guest(route('api/login')) //whatever you want.

vous pouvez retourner la réponse en tant que JSON s'il s'agit de Services API.

-8
répondu Nadimuthu Sarangapani 2017-11-17 23:24:01
la source

Autres questions sur