2012-12-06 7 views
5

मैंने प्रमाणीकरण बनाया है, और यह पूरी तरह से काम कर रहा है। लेकिन आंतरिक पृष्ठों की जांच में कुछ समस्या है। उदाहरण के लिए,लार्वेल ऑथ सभी पृष्ठों के लिए जाँच करें

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

पैटर्न फिल्टर करने के लिए उदाहरण के लिए, दूसरों के रूप में डॉक्स में मूल रूप से कर रहे हैं। यह सबसे तेज़ लेकिन सबसे अधिक समस्याग्रस्त हो सकता है क्योंकि इस फ़ंक्शन में रेगेक्स को पंजीकृत करने के समस्याग्रस्त तरीके से (* वास्तव में (.*) में परिवर्तित हो गया है)।

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]Movie')); 
Route::delete('api/deleteactor/{id}', array('uses' =>'[email protected]')); 
Route::delete('api/deletemovie/{id}', array('uses' =>'[email protected]')); 
संबंधित मुद्दे