2012-12-06 12 views
5

Ich habe die Authentifizierung erstellt, und es funktioniert perfekt. Aber es gibt ein Problem beim Überprüfen der inneren Seiten. Beispiel:Laravel Auth-Check für alle Seiten

Route::get('/', array('before' => 'auth' , 'do'=> function(){ 
return View::make('home.index'); 
})); 

Die Indexseite ist nur für angemeldete Benutzer sichtbar. Aber wann immer ich zu den inneren Seiten gegangen bin, zum Beispiel example.com/products. Die Produkte Seite kann in ohne Protokoll sichtbar.

Antwort

1

einfach überprüfen, ob Benutzer in Ihren Ansichten angemeldet sind. Sie alle Controller beschränken (wenn Sie es verwenden) oder Routen Gruppen überprüfen, und einen Filter auf ganze Gruppe von Routen geben: http://laravel.com/docs/routing#groups

+0

ja, ich kann das tun. Das Problem ist, ich habe viele innere Seiten. Kann nicht alle Seiten prüfen. Es sollte eine einfache Lösung geben – Mifas

+0

Meine Antwort bearbeitet – matiit

+1

Route Gruppen sind ideal für die Anwendung von Filtern, um dies zu erreichen, aber ich würde nicht vorschlagen, es auf View-Ebene als eine praktikable Alternative zu tun - es tritt nicht früh genug (dh a 'POST' könnte immer noch einen Effekt haben, bevor Sie mit dem Rendern einer Ansicht beginnen, die den Benutzer dann herausstößt. – Simon

8

Es gibt mehrere Möglichkeiten von Filtern für viele Routen anwenden.

Setzen Sie rotues in Route::group() oder wenn Sie Controller verwenden, fügen Sie den Filter dort hinzu, fügen Sie ihn in Base_Controller hinzu, damit er auf alle angewendet wird. Sie können auch Filtermuster verwenden und eine Regex verwenden, die den Filter auf alle mit Ausnahme einiger weniger anwendet.

Dokumentation

Routen Filter: http://laravel.com/docs/routing#route-filters

Beispiel der Muster-Filter, wie die andere sind im Grunde in der Dokumentation. Dieser könnte der schnellste aber auch der problematischste sein wegen der problematischen Art, eine Regex in dieser Funktion zu registrieren (der * wird tatsächlich in (.*) umgewandelt).

Route::filter('pattern: ^(?!login)*', 'auth'); 

Dies wird Auth auf jeder Strecke außer example.com/login gelten.

1
Route::filter('pattern: /*', array('name' => 'auth', function() 
{ 
    return View::make('home.index'); 
})); 
2

Es mag einen besseren Weg geben, aber ich nehme einen Whitelist-Ansatz. Alles ist für die Öffentlichkeit gesperrt, außer für die Seiten, die ich in dieses Array lege.

// config/application.php 
return array(

    'safe' => array(
     '/', 
     'card/form_confirm', 
     'record/form_create', 
     'card/form_viewer', 
     'user/login', 
     'user/quick_login', 
     'user/register', 
     'info/how_it_works', 
     'info/pricing', 
     'info/faq', 
     'info/our_story', 
     'invite/accept', 
     'user/terms', 
     'user/privacy', 
     'email/send_email_queue', 
     'user/manual_login', 
     'checkin/', 
     'checkin/activate', 
     'system/list', 
    ), 

// routes.php 
Route::filter('before', function() 
{ 
    // Maintenance mode 
    if(0) return Response::error('503'); 

    /* 
     Secures parts of the application 
     from public viewing. 
    */ 
    $location = URI::segment(1) . '/' . URI::segment(2); 
    if(Auth::guest() && !in_array($location, Config::get('application.safe'))) 
     return Redirect::to('user/login'); 
}); 
7

Hier ist meine Lösung.

/** 
* Groups of routes that needs authentication to access. 
*/ 
Route::group(array('before' => 'auth'), function() 
{ 
    Route::get('user/logout', array(
     'uses' => '[email protected]', 
    )); 

    Route::get('/', function() { 
     return Redirect::to('dashboard'); 
    }); 

    Route::get('dashboard', array(
     'uses' => '[email protected]', 
    )); 

    // More Routes 

}); 

// Here Routes that don't need Auth. 
+0

Einfach aber effektiv, nein? – thesunneversets

0

Es funktionierte für mich. Schau es dir an.

Route::when('*', 'auth.basic'); 

Route::get('api/getactorinfo/{actorname}', array('uses' =>'[email protected]')); 
Route::get('api/getmovieinfo/{moviename}', array('uses' =>'[email protected]')); 
Route::put('api/addactor/{actorname}', array('uses' =>'[email protected]')); 
Route::put('api/addmovie/{moviename}/{movieyear}', array('uses' =>'[email protected]')); 
Route::delete('api/deleteactor/{id}', array('uses' =>'[email protected]')); 
Route::delete('api/deletemovie/{id}', array('uses' =>'[email protected]')); 
Verwandte Themen