2012-12-06 31 views
5

Tôi đã tạo Xác thực và nó hoạt động hoàn hảo. Nhưng có một số vấn đề trong việc kiểm tra các trang bên trong. Ví dụ:Kiểm tra xác thực Laravel cho tất cả các trang

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

Trang chỉ hiển thị cho người dùng đã đăng nhập. Nhưng bất cứ khi nào tôi đi đến các trang bên trong, ví dụ: example.com/products. Trang sản phẩm có thể hiển thị mà không cần đăng nhập.

Trả lời

1

Chỉ cần kiểm tra xem người dùng đã đăng nhập trong chế độ xem của bạn chưa. Hoặc hạn chế tất cả bộ điều khiển (nếu bạn sử dụng) Hoặc kiểm tra Nhóm tuyến đường và cung cấp bộ lọc cho toàn bộ nhóm tuyến: http://laravel.com/docs/routing#groups

+0

yeah, tôi có thể làm điều đó. vấn đề là tôi có rất nhiều trang bên trong. Không thể kiểm tra tất cả các trang. Có một giải pháp đơn giản – Mifas

+0

Chỉ cần chỉnh sửa câu trả lời của tôi – matiit

+1

Nhóm tuyến đường là lý tưởng để áp dụng bộ lọc để đạt được điều này, nhưng tôi sẽ không đề xuất thực hiện ở cấp chế độ xem như một giải pháp thay thế khả thi. 'POST' vẫn có thể có hiệu lực trước khi bạn bắt đầu hiển thị chế độ xem sau đó đá người dùng ra) – Simon

8

Có một số cách áp dụng bộ lọc cho nhiều tuyến đường.

Đặt các trục quay thành Route::group() hoặc nếu bạn sử dụng bộ điều khiển, hãy thêm bộ lọc vào đó, thêm bộ lọc vào Base_Controller để nó sẽ được áp dụng cho tất cả. Bạn cũng có thể sử dụng các mẫu bộ lọc và sử dụng regex áp dụng bộ lọc cho tất cả ngoại trừ một số bộ lọc bạn không muốn.

Documentation

Route lọc: http://laravel.com/docs/routing#route-filters

Ví dụ bộ lọc mô hình, như những người khác về cơ bản trong các tài liệu. Điều này có thể là nhanh nhất nhưng cũng là vấn đề nhất vì cách đăng ký regex có vấn đề trong chức năng này (* thực sự được chuyển đổi thành (.*)).

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

Điều này sẽ áp dụng auth cho bất kỳ tuyến đường nào trừ example.com/login.

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

Có thể có cách tốt hơn nhưng tôi có phương pháp tiếp cận danh sách cho phép. Tất cả mọi thứ bị chặn từ công chúng ngoại trừ những trang tôi đưa vào mảng này.

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

Đây là giải pháp của tôi.

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

Đơn giản nhưng hiệu quả, phải không? – thesunneversets

0

Nó làm việc cho tôi. hãy nhìn vào nó.

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]')); 
Các vấn đề liên quan