web-dev-qa-db-de.com

Route [Login] nicht definiert

Ich versuchte heute zum ersten Mal mit Laravel zu spielen. Beim Versuch, localhost/project/public zu besuchen, wird folgende Fehlermeldung angezeigt:

InvalidArgumentException
Route [Login] nicht definiert.

app/routes.php:

<?php

Route::get('/', '[email protected]');
Route::get('login', '[email protected]');
Route::post('login', '[email protected]');
Route::get('dashboard', '[email protected]');

app/controller/HomeController.php:

<?php

class HomeController extends Controller {

    public function redirect()
    {
        if (Auth::check()) 
            return Redirect::route('dashboard');

        return Redirect::route('login');
    }

}

app/controller/LoginContoller.php:

<?php

class LoginController extends Controller {

    public function show()
    {
        if (Auth::check()) 
            return Redirect::route('dashboard');

        return View::make('login');
    }

    public function do()
    {
        // do login
    }

}

app/controller/DashboardController.php:

<?php

class DashboardController extends Controller {

    public function show()
    {
        if (Auth::guest()) 
            return Redirect::route('login');

        return View::make('dashboard');
    }

}

Warum erhalte ich diesen Fehler?

31
inkd

Sie versuchen, auf eine benannte Route zu leiten, deren Name login ist, aber Sie haben keine Routen mit diesem Namen

Route::post('login', [ 'as' => 'login', 'uses' => '[email protected]']);

Der 'as'-Teil des zweiten Parameters definiert den Namen der Route. Der erste String-Parameter definiert route.

53
Jeff Lambert

In der App\Exceptions\Handler.php

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

    return redirect()->guest(route('auth.login'));
}
30
aisthetes

Laravel hat benannte Routen in Laravel 4.2 eingeführt.

WAS IS NAMED ROUTES? 

Named Routes ermöglicht Ihnen, Ihrem Router-Pfad Namen zu geben. Daher können Sie die Routen in der erforderlichen Datei anhand des Namens aufrufen.


WIE NAMED ROUTES ERSTELLEN?

Benannte Routen, die auf zwei verschiedene Arten erstellt wurden: as und name ()

METHODE 1:

Route::get('about',array('as'=>'about-as',function()
    {
            return view('about');
     }
));

METHODE 2:

 Route::get('about',function()
{
 return view('about');
})->name('about-as');

Wie verwenden wir Ansichten?

<a href="{{ URL::route("about-as") }}">about-as</a>

Daher hat laravel 'middleware' => 'auth' bereits eine Umleitungsseite als Anmeldeseite definiert, wenn der Benutzer noch nicht angemeldet ist. Daher sollten wir as verwenden

    Route::get('login',array('as'=>'login',function(){
    return view('login');
}));
11
thangavel .R

Sie müssen Ihrer web.php-Routendatei die folgende Zeile hinzufügen:

Auth::routes();

Falls Sie über benutzerdefinierte Auth-Routen verfügen, stellen Sie sicher, dass/login route 'as' => 'login' hat.

8

Im Falle einer API oder sagen wir dies bei der Implementierung von JWT. JWT-Middleware löst diese Ausnahme aus, wenn das Token nicht gefunden wurde, und versucht, auf die Anmeldungsroute umzuleiten. Da es keine angegebene Anmelderoute finden konnte, wird diese Ausnahme ausgelöst Route in "app\Exceptions\Handler.php"

verwenden Sie Illuminate\Auth\AuthenticationException.

protected function unauthenticated($request, AuthenticationException $exception){
        return $request->expectsJson()
             ? response()->json(['message' => $exception->getMessage()], 401)
            : redirect()->guest(route('ROUTENAME'));
}
4
Nirav Chavda

Versuchen Sie diese Methode: 

suchen Sie nach dieser Datei 

"RedirectifAuthenticated.php"

aktualisieren Sie das Folgende wie Sie möchten

 if (Auth::guard($guard)->check()) {
   return redirect('/');
 }

$ guard als Argument wird den Namen des von Ihnen festgelegten benutzerdefinierten Guard aufnehmen, z. "admin" dann sollte es so sein.

if (Auth::guard('admin')->check()) {
  return redirect('/admin/dashboard');
}else{
  return redirect('/admin/login');
}
3
Delino

Ich bin vor kurzem auf diesen Fehler gestoßen, nachdem ich das integrierte Authentifizierungsrouting von Laravel mit php artisan make:auth verwendet hatte. Wenn Sie diesen Befehl ausführen, werden diese neuen Routen zu Ihrer Datei web.php hinzugefügt:

Auth::routes();

Route::get('/home', '[email protected]')->name('home');

Ich muss diese Routen versehentlich gelöscht haben. Durch Ausführen von php artisan make:auth wurden die Routen erneut wiederhergestellt und das Problem behoben. Ich arbeite mit Laravel 5.5.28.

2
clone45

Laravel ^ 5.7

Die Authentifizieren Middleware

Laravel ^ 5.7 enthält eine neue Middleware, mit der nicht authentifizierte Benutzer behandelt und umgeleitet werden können.

Es funktioniert gut mit "web" guard ... natürlich sollte die " login " route (oder wie auch immer Sie Ihre login route nennen) im web definiert sein .php.

das Problem ist, wenn Sie Custom Guard verwenden. Ein anderer Wächter würde nicht authentifizierte Benutzer auf eine andere Route umleiten.

hier ist eine schnelle Problemumgehung, die auf der Antwort von John basiert (funktioniert bei mir).


app/Http/Middleware/ Authentifizieren Sie . php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * @var array
     */
    protected $guards = [];




    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string[]  ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, ...$guards)
    {
        $this->guards = $guards;

        return parent::handle($request, $next, ...$guards);
    }




    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {

            if (in_array('admin', $this->guards)) {

                return route('admin.login');
            }

            return route('login');
        }
    }
}

Quelle: Ausgabe # 26292

1
chebaby

Ersetzen Sie in Ihren Ansichten (Blade-Dateien) alle 

{{ route ('/')}} ----- von ----> {{ url ('/')}}

1
Rubén Ruíz

Wenn jemand dies von einem Rest-Client (z. B. Postman) erhält - Sie müssen den Header auf Accept application/json setzen. 

Klicken Sie dazu auf die Registerkarte Kopfzeilen, fügen Sie einen neuen Schlüssel "Accept" hinzu und geben Sie den Wert "Accept/Json" ein.

0
Faiyaz Haider
Route::post('login', '[email protected]')->name('login')

funktioniert sehr gut und ist sauber und selbsterklärend 

0
Denise Ignatova

Bin zu spät zur Party. Wenn Ihre Erwartung eine Art von Json ist, der anders als umgeleitet zurückgegeben wird, bearbeiten Sie den Ausnahmehandler.

Gehe zu App\Exceptions\Handler.php.__ und bearbeite diesen Code:

public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

zu

public function render($request, Exception $exception)
    {
        return response()->json(
            [
                'errors' => [
                    'status' => 401,
                    'message' => 'Unauthenticated',
                ]
            ], 401
        );
    }
0

versuchen Sie es mit der Kopfzeile Ihrer Anfrage hinzuzufügen: Accept = application/json postman add header

0
jhon chacolla