2016-01-26 15 views
5

मैं एक नया Laravel 5.2 परियोजना शुरू कर दिया है, laravel new MyApp उपयोग कर, और php artisan make:auth माध्यम से प्रमाणीकरण की गयी। इसका उद्देश्य केवल सदस्य ही होना चाहिए, जहां पहला उपयोगकर्ता बीजित होता है, और शेष बनाता है (कोई मैन्युअल उपयोगकर्ता निर्माण/पासवर्ड रीसेट/आदि नहीं)। ,Laravel अप्रत्याशित रीडायरेक्ट (302)

Route::group(['middleware' => 'web'], function() { 
    // Authentication Routes... 
    Route::get('user/login', ['as' => 'user.login',  'uses' => 'Auth\[email protected]']); 
    Route::post('user/login', ['as' => 'user.doLogin', 'uses' => 'Auth\[email protected]'  ]); 

    Route::group(['middleware' => 'auth'], function() { 
    // Authenticated user routes 
    Route::get('/', ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('user/{uid?}', ['as' => 'user.profile', 'uses' => 'Auth\[email protected]' ]); 
    Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\[email protected]' ]); 
    Route::get('/user/add', ['as' => 'user.add',  'uses' => 'Auth\[email protected]']); 

    [...] 
    }); 
}); 

मैं ठीक प्रवेश कर सकते हैं लेकिन मैं कुछ बहुत ही "अजीब" व्यवहार का सामना कर रहा हूँ - जब मैं लॉग आउट करना (logout में निर्मित के माध्यम से प्रयास करें:

ये मार्ग मैं वर्तमान में परिभाषित किया है कर रहे हैं कारीगर के माध्यम से बनाई गई विधि), पृष्ठ 302 पर घर पर रीडायरेक्ट करता है, और मैं अभी भी लॉग इन हूं।

और क्या है, जबकि लगभग सभी पेज (यहां सूचीबद्ध नहीं) अपेक्षित काम करते हैं, user.add भी एक उत्पादन करता है होम पेज पर 302।

, ध्यान दें मुखपृष्ठ $redirectTo रूप AuthController को घोषित किया जाता है कि यदि कोई फर्क

मैं debugbar के माध्यम से रीडायरेक्ट बारे में पता चला बनाता है। क्या देखना है इस पर कोई विचार?

उत्तर

3

बाल खींच के कई घंटे के बाद, मैं अपने जवाब मिल गया है - और यह मूर्खतापूर्ण है।

समस्या यह है कि मार्ग user.profile एक रास्ता user/{uid?} है और यह दोनों user/logout और user/add पथ के रूप से मेल खाता है है।

यह दूसरों से पहले किया जा रहा है, और एक regex या इसी तरह की हो रही है, यह मार्ग संभाला।

मैं अभी भी क्यों एक 302 के लिए कि पेज जनरेट किया गया था पता नहीं है, लेकिन पाया कि यह AuthController से बाहर है और UserController (जहां यह शुरू से ही होना चाहिए) में जाने व्यवहार तय की।

इस प्रकार, मेरी (संशोधन किया है और काम कर रहे) मार्गों अभी की तरह लग रहे:

Route::group(['middleware' => 'web'], function() { 
    // Authentication Routes... 
    Route::get('user/login', ['as' => 'user.login',  'uses' => 'Auth\[email protected]']); 
    Route::post('user/login', ['as' => 'user.doLogin', 'uses' => 'Auth\[email protected]'  ]); 

    Route::group(['middleware' => 'auth'], function() { 
    // Authenticated user routes 
    Route::get('/',  ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('/home', ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\[email protected]' ]); 

    // *** Added /profile/ here to prevent matching with other routes **** 
    Route::get('user/profile/{uid?}', ['as' => 'user.profile', 'uses' => '[email protected]' ]); 
    Route::get('/user/add',   ['as' => 'user.add',  'uses' => '[email protected]']); 

    [...] 
    }); 
}); 
+0

पर भी रीडायरेक्ट किया जाता है, ऑथकंट्रोलर से फ़ंक्शन को हल किया जाता है समस्या .. –

+0

+1 मैं एक ही समस्या के साथ सभी दोपहर बाहर अपने बालों को फाड़ रहा हूँ। मैंने कभी नहीं देखा कि मार्ग किस क्रम में थे। –

1

लॉगआउट home के बाद डिफ़ॉल्ट रीडायरेक्ट पृष्ठ हो सकता है और ऐसा लगता है कि आपके web रूट में home नहीं है। यह लॉगआउट के बाद login पेज पर रीडायरेक्ट करेगा अपने AuthController.php

use AuthenticatesAndRegistersUsers, ThrottlesLogins; // after this line 
$redirectAfterLogout = 'login' // add this line 

में नीचे दिए गए कोड का प्रयास करें। यदि आप चाहें तो इसे किसी भी मार्ग पर बदल सकते हैं। मैंने उदाहरण के रूप में login का उपयोग किया।

या

आप \vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php

public function logout() 
    { 
     Auth::logout(); 

     return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : 'login'); 
    } 

में लॉगआउट मार्ग के बाद बदल सकते हैं मैं login के डिफ़ॉल्ट रूट बदल दिया है। यदि आपके AuthController.php में $redirectAfterLogout नहीं है तो यह यहां रीडायरेक्ट पथ के लिए दिखेगा। मैं लोगों को यहां संपादित करने का सुझाव नहीं देता, यह एक तरह का कठिन कोडिंग है।

+0

'मार्ग :: प्राप्त करें ('/', ['के रूप में' => 'घर', 'उपयोग' => 'होमकंट्रोलर @ इंडेक्स']); 'यह एक' घर 'मार्ग है, लेकिन आप नहीं कर सकते जब तक आप लॉग इन नहीं होते हैं तब तक इसका उपयोग करें। हालांकि आप सही हैं, 'लॉगआउट' से' रीडायरेक्ट 'डिफ़ॉल्ट रूप से' लॉगिन 'पृष्ठ पर वापस आना चाहिए। –

+0

जैसा ऊपर बताया गया है, 'होम' मार्ग का नाम है - और जो मैं देखता हूं वह यह है कि अनुरोध' ऑथकंट्रोलर @ लॉगआउट 'पर जाता है और मुझे' होमकंट्रोलर @ इंडेक्स ' – hexblot

3

मैं 302 के साथ एक समस्या का सामना करना पड़ा गए रीडायरेक्ट जब ajax अनुरोध पोस्टिंग। इस मामले में समाधान सीएसआरएफ टोकन को शामिल करना याद रखना था।

Laravel 5.4 दस्तावेजों यहाँ देखें: https://laravel.com/docs/5.4/csrf

+0

मुझे एजेक्स अनुरोधों के दौरान भी यह समस्या थी जहां मैं कुछ डेटा को मान्य कर रहा हूं। और सत्यापित करने के लिए फ़ील्ड फॉर्म में फ़ील्ड से मेल नहीं खा रहा था। – Raccoon

0

मैं इस मुद्दे था और यह पता चला कि मैं एक मार्ग था: मेरे ajax नियंत्रक अंदर अनुप्रेषित। जो समझ में नहीं आता है क्योंकि जाहिर है हमें अजाक्स वापस करना है लेकिन मैं एक मार्ग वापस कर रहा था!

संबंधित मुद्दे