2012-12-06 13 views
5

私は認証を作成し、その動作は完全です。しかし、内側のページのチェックにはいくつか問題があります。例えば、すべてのページのLaravel認証チェック

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

インデックスページには、ユーザーログインのためにのみ表示されます。しかし、私が内側のページに行ったときはいつも、例えばexample.com/productsです。商品ページはログインせずに見ることができます。

答えて

1

ユーザーがあなたのビューにログインしているかどうかを確認してください。 または(あなたがそれを使用している場合)、すべてのコントローラを制限 またはルートグループをチェックし、ルートのグループ全体にフィルタを与える:http://laravel.com/docs/routing#groups

+0

ええ、私はそれを行うことができます。問題は私が多くの内側のページを持っていることです。すべてのページを確認できません。 – Mifas

+0

ちょっと編集しました – matiit

+1

ルートグループはこれを達成するためにフィルタを適用するのに理想的ですが、実行可能な選択肢としてビューレベルで行うことはお勧めしません。あなたがユーザーを追い出すビューのレンダリングを始める前に、 'POST'はまだ効果があります) – Simon

8

多くのルートのためにフィルタを適用する方法はいくつかあります。

ローテーションをRoute::group()に入れたり、コントローラを使用している場合は、フィルタをBase_Controllerに追加してすべてに適用されるようにします。また、フィルタパターンを使用して、正規表現を使用して、ほんの数個以外のすべてにフィルタを適用することもできます。

ドキュメント

ルートフィルタ:パターンフィルタにhttp://laravel.com/docs/routing#route-filters

例は、他のドキュメントにbasiclyからです。これは、この関数に正規表現を登録する問題のある方法のために最も速く、最も問題になる可能性があります(*は実際に(.*)に変換されます)。

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

example.com/loginを除くすべてのルートに認証が適用されます。

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

ホワイトリストアプローチを採用しています。私はこの配列に置かれたページを除いてすべてが公開からブロックされています。

// 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

私の解決策です。

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

シンプルだが効果的な、いいえ? – thesunneversets

0

私のために働いた。それを見てください。ドキュメントページ上

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]'));