2012-12-06 18 views
5

Kimlik Doğrulama'yı oluşturdum ve mükemmel çalışıyor. Ancak iç sayfaların kontrol edilmesinde bazı problemler var. Örneğin,Laravel auth tüm sayfaları kontrol et

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

Dizin sayfası sadece giriş yapan kullanıcılar için görünür. Ama ne zaman iç sayfalara gittiğimde, örneğin example.com/products. Ürünler sayfası giriş yapmadan görülebilir.

cevap

1

Sadece görüş alanınızda kullanıcı olup olmadığını kontrol edin. Ya (bunu kullanıyorsanız) tüm denetleyici kısıtlamak Veya Rota Gruplarını kontrol edin ve yolların bütün grup için bir filtre vermek: Birçok rotalar için filtreleri uygulamanın çeşitli yolları vardır http://laravel.com/docs/routing#groups

+0

evet, bunu yapabilirim. Sorun çok fazla iç sayfa var. Tüm sayfaları kontrol edemiyorum. Basit bir çözüm olmalı – Mifas

+0

Sadece benim cevabımı düzenledim – matiit

+1

Rota Grupları bunu başarmak için filtreler uygulamak için idealdir, ancak bunu uygulanabilir bir alternatif olarak görüntüleme düzeyinde yapmayı öneriyorum - yeterince erken başlamaz (örn. "POST", kullanıcıyı dışarı çıkaran bir görünüm oluşturmaya başlamadan önce hala bir etkisi olabilir) – Simon

8

.

Notları Route::group() içine koymak veya denetleyicileri kullanıyorsanız, filtreyi buraya ekleyin, Base_Controller'a ekleyin, böylece hepsine uygulanacaktır. Ayrıca, filtre desenlerini kullanabilir ve filtreyi, istemediğiniz birkaçının haricinde uygulayan bir normal ifadeyi kullanabilirsiniz.

Belgeleri

Rota filtreler: model filtreye http://laravel.com/docs/routing#route-filters

Örnek, diğer dokümanlar Özünde. Bu, bu işlevdeki bir normal ifadeyi kaydetmenin sorunlu yolu nedeniyle en hızlı ancak en sorunlu olabilir (* aslında (.*)'a dönüştürülür).

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

Bu

example.com/login dışında herhangi rotaya kimlik doğrulama uygular.

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

Daha iyi bir yol olabilir, ancak beyaz liste yaklaşımını kullanırım. Bu diziye koyduğum sayfalar dışında her şey herkesten engellenir.

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

İşte benim çözümüm.

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

Basit ama etkili, hayır? – thesunneversets

0

Benim için çalıştı. ona bir göz atın. dokümantasyon sayfasından Devamı

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' =>'Ac[email protected]')); 
Route::delete('api/deletemovie/{id}', array('uses' =>'[email protected]')); 
İlgili konular