2016-10-18 2 views
3

Ich benutze Laravel 5.3 und versuche, Authentifizierungssystem zu implementieren. Ich habe php artisan Befehl make:auth verwendet, um es einzurichten. Ich habe die Ansichten nach meinem Layout bearbeitet und meine Dashboard-Seite statt nach Hause umgeleitet (im Setup als Standard festgelegt). Nun, wenn ich abzumelden versuche es wirft mich diesen FehlerAbmelden und Weiterleitung zur Anmeldeseite mit Laravel 5.3?

NotFoundHttpException in RouteCollection.php line 161 

Mein Code in Routen/web.php ist:

Auth::routes(); 

Route::get('/pages/superadmin/dashboard', '[email protected]'); 

HomeController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

class HomeController extends Controller 
{ 
/** 
* Create a new controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware('auth'); 
} 

/** 
* Show the application dashboard. 
* 
* @return \Illuminate\Http\Response 
*/ 
public function index() 
{ 
    return view('dashboard'); 
} 
} 

Auth/Login Controller.php

<?php 

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class LoginController extends Controller 
{ 
/* 
|-------------------------------------------------------------------------- 
| Login Controller 
|-------------------------------------------------------------------------- 
| 
| This controller handles authenticating users for the application and 
| redirecting them to your home screen. The controller uses a trait 
| to conveniently provide its functionality to your applications. 
| 
*/ 

use AuthenticatesUsers; 

/** 
* Where to redirect users after login. 
* 
* @var string 
*/ 
protected $redirectTo = '/dashboard'; 

/** 
* Create a new controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware('guest', ['except' => 'logout']); 
} 
} 

habe ich versucht, die Lösungen auf dieser Seite: How to set laravel 5.3 logout redirect path? aber diese Fehler haben nicht funktioniert und zeigt:

ReflectionException in Route.php line 339: 
Class App\Http\Controllers\Auth\Request does not exist 

ich mag es umleiten zum Login-Seite, die in Auth/Ordner ist.

Antwort

0

In Laravel 5.3 logout ist http post statt http get. Sie können sich per Post-Anfrage abmelden wie Taylor Otwell im Author Scaffolding.

<a href="{{ url('/logout') }}" 
    onclick="event.preventDefault(); 
      document.getElementById('logout-form').submit();"> 
    Logout 
</a> 

<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;"> 
    {{ csrf_field() }} 
</form> 
2

Ich löste schließlich dieses Problem, indem Sie diese Zeile in meinem LoginController.php Hinzufügen

protected $redirectAfterLogout = 'auth/login'; 

und bearbeiten Sie diese Datei \ Anbieter \ Laravel \ Framework \ src \ Illuminate \ Foundation \ Auth \ AuthenticatesUsers.php Es wird der Standard '/' verwendet, wenn Sie in dieser Datei $ redirectAfterLogout nicht angeben. Sie können es auch auf GitHub finden. Link steht am Ende der Antwort.

public function logout() 
{ 
    return redirect(property_exists($this, 'redirectAfterLogout') ? $this- >redirectAfterLogout : '/'); 
} 

Sie können es auch hier überprüfen: https://github.com/laravel/framework/commit/aa1204448a0d89e2846cbc383ce487df6efd9fc8#diff-b72935cc9bfd1d3e8139fd163ae00bf5

Hoffe, dass es jemand hilft.

Danke

+1

Danke, es funktionierte für mich! – Vinny

+0

Ein Problem besteht darin, dass der Herstellerordner nicht versionsgesteuert ist, wenn Sie git verwenden. Stattdessen können Sie den Inhalt der Abmeldefunktion in Ihren LoginController kopieren. Wenn Sie sich dann abmelden, wird er anstelle des Ordners im Herstellerpaket angezeigt –

+0

Ich empfehle, keine Herstellerdateien zu bearbeiten. Ich werde meine Lösung unten posten. –

2

Wenn Sie den Vorgang fortsetzen möchten GET verwenden

Route::get('logout', 'Auth\[email protected]'); 

oder

Route::get('logout', '\App\Http\Controllers\Auth\[email protected]'); 
0

Umleiten Abmeldung abzumelden Seite mir einzuloggen bedeutet, dass keine Seite in der ist Website verfügbar, sofern der Benutzer nicht authentifiziert ist.

Ich bin kein großer Fan von der Verzeichnis Verzeichnis zu berühren, wie es oben vorgeschlagen wird. Es stimmt, Laravel 5.4 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AutenticateUser->logout() leitet zu '/' um. Es gibt keinen Parameter zum Ändern.So machen wir es so halten und nur einen ‚Auth Schutz‘ auf der Route ‚/‘ (home)

in /routes/web.php hinzufügen Route::get('/', function() { return view('home'); })->middleware('auth');

Ist es nicht die einfachste Art und Weise hinzufügen?

2

in Laravel 5,4

Getestet Die Lösung, die ich glaube, am besten funktioniert die geerbte „Logout“ Methode überschreibt, die aus dem Inneren des app/Http/Controller/Auth/LoginController.php Datei aufgerufen wird . Tun Sie dies, indem Sie die folgende Methode zu dieser Klasse hinzu:

/** 
* Log the user out of the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function logout(Request $request) 
{ 
    $this->guard()->logout(); 

    $request->session()->flush(); 

    $request->session()->regenerate(); 

    return redirect('/login'); 
} 

Als „LoginController“ Klasse erbt von Illuminate \ Foundation \ Auth \ AuthenticatesUsers, sollten Sie sicher der Lage sein, diese Methode außer Kraft zu setzen (in der LoginController) ohne Bearbeitung der eigentlichen Anbieter Datei selbst ... die AuthenticatesUsers Datei bearbeiten oder jede Anbieter Datei würde großen Kopfschmerzen die Straße hinunter führen, wenn Sie jemals ein Upgrade wollte ...

der einzige hier zusätzliche Schritt ist, dass Sie müssen die folgende Zeile an der Spitze einschließen der LoginController Klasse:

use Illuminate\Http\Request; 
Verwandte Themen