Laravel - Wie redirect auf login, wenn der Benutzer nicht authentifiziert
Ich versuche, die __constructor
von der erweiterten Klasse (AdminController
erstreckt AdminBaseController
), aber sich es nicht funktioniert und ich keine Ahnung habe, was sein kann, sehen Sie hier meine beiden Klassen:
AdminBaseController.php
class AdminBaseController extends Controller
{
public function __construct(){
if (!Auth::user()){
return view('admin.pages.login.index');
}
}
}
AdminController.php
class AdminController extends AdminBaseController
{
public function __construct(){
parent::__construct();
}
public function index()
{
return view('admin.pages.admin.index');
}
public function ajuda()
{
return view('admin.pages.admin.ajuda');
}
}
BEARBEITEN
Dies ist mein admin
route-Gruppe:
Route::group([
'prefix' => 'admin',
'middleware' => 'auth'
], function () {
Route::get('/', 'Admin\AdminController@index');
Route::get('login', 'Admin\AuthController@getLogin');
Route::post('login', 'Admin\AuthController@postLogin');
Route::get('logout', 'Admin\AuthController@getLogout');
Route::group(['prefix' => 'configuracoes'], function () {
Route::get('geral', 'Admin\AdminConfiguracoesController@geral');
Route::get('social', 'Admin\AdminConfiguracoesController@social');
Route::get('analytics', 'Admin\AdminConfiguracoesController@analytics');
});
Route::get('ajuda', 'Admin\AdminController@ajuda');
});
- Sie tun nicht alles, was im inneren AdminController::construct() so können Sie vermeiden, es zu schreiben, und die Klasse seiner Eltern-Konstruktor. Aus der Frage nicht klar ist: was ist das problem ?
- Ich habe eine Menge Controller für den admin-Bereich, und zu vermeiden, code wiederholen, ich war das denken in überprüfen Sie, ob der Benutzer auth mit der __constructor innen
AdminBaseController
- ok. Sollten Sie eine middleware zu überprüfen, ob der Benutzer ein admin
- ich habe eine Antwort, die erklären, wie die Verwendung einer middleware
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der controller ist nicht der richtige Ort, um zu überprüfen, ob ein Benutzer authentifiziert ist oder nicht. Sollten Sie die Nutzung einer middleware für, die. Zu bekommen info auf, was eine middleware ist zu überprüfen hier
Lassen Sie uns sehen, wie können Sie die Standard-Laravel ist
auth
middleware für diesen Zweck:Zunächst loswerden Ihr
AdminBaseController
und verwenden Sie nurAdminController
Dann haben Sie, um zu überprüfen, dass die
auth
middleware aktiviert ist, in der Dateiapp\Http\Kernel.php
Sollten Sie die Zeile:
Dies bedeutet, dass die middleware ist aktiv und nutzbar für Ihre Routen.
Jetzt gehen wir innerhalb der middleware Klasse
app\Http\Middleware\Authenticate.php
festlegen der middleware Verhalten :Nun ist die einzige Sache Links zu tun, ist zu entscheiden, für welche Strecken sollten Sie in der middleware. Angenommen, Sie haben zwei Routen, die Sie sein wollen, nur zugänglich von authentifizierten Benutzern, sollten Sie die Verwendung der middleware für diese beiden Routen, die in dieser Weise:
admin/login
route von deradmin
Strecke, ist dies der richtige Weg?Verwenden middleware für diesen Zweck, und dann im controller-Konstruktor verwenden Sie es wie im Beispiel unten.
Dann müssen Sie auf sicheren Routen, auf denen Sie möchten von Benutzer angemeldet sein, um Zugriff.
Authenticate
im inneren eine Funktion, die aufgerufen wirdhandle
, vielleicht kann ich es verwenden?In Laravel 5.5 , die einem nicht authentifizierten Benutzer wird die Ursache der Authenticate middleware zu werfen
AuthenticationException
Ausnahme.Erwischt wird, werden von der app/Ausnahmen/Handler-Klasse, die den Aufruf des
render
Methode, die verantwortlich für die Umwandlung einer bestimmten Ausnahme in einer HTTP-response.App/Ausnahmen/Handler extends 'Illuminate\Foundation\Ausnahmen\Handler', der sich in '/vendor/laravel/src/Beleuchten/Foundation/Exceptions/Bearbeiter". Es hat seine eigene render-Methode. Innerhalb dieser render-Methode, es gibt eine
if else
- Anweisung, die sagt.Unten ist das "nicht authentifiziert" - Methode, die aufgerufen wird, die oben innerhalb der gleichen Klasse
innerhalb dieser Methode ist, wo Sie umleiten, die einem nicht authentifizierten Benutzer.
Soweit ich sehen kann, das ist, was hinter den kulissen abläuft.
Die Art und Weise Sie erweitert, und führen Sie die übergeordneten constrictor ist richtig, aber
Rückgabe einer Ansicht ausführen, es ist nur möglich von Routen, controller, actions und Filter. Ansonsten müssen Sie rufen Sie die send().
für Sie Zweck ich denke, Sie sollten vor dem Gebrauch für filter http://laravel.com/docs/4.2/routing#route-filters