2017-09-18 53 views
0

在我的主頁我有一個表單,我只是加載數據,如果用戶進行身份驗證。發生什麼是我通過ajax提交表單,當用戶未通過身份驗證時,它會在控制檯中發出錯誤。Laravel - 路徑::後不要求登錄

它應該問問登錄,而不是,我不知道爲什麼。

這是我發送的數據:

var formData = $('#newLetter').serialize(); 
    var url = '/backend/newLetter/'; 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: formData, 
     cache: false, 
     //dataType: 'json', 
     success: function (data, textStatus, jqXHR) { 
      if (typeof data.error === 'undefined') { 
       console.log('SUCCESS: ' + data.success); 
       window.location.href = "/backend/user-letter"; 
      } else { 
       console.log('ERRORS: ' + data.error); 
      } 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      // Handle errors here 
      console.log('ERRORS: ' + textStatus); 
     }, 
     complete: function() { 

     } 
    }); 

我的路線:

Auth::routes();  
Route::post('/backend/newLetter', '[email protected]'); 

當用戶沒有通過驗證,它關係到登錄,登錄過程表單後我想是。

我該怎麼做?

謝謝

+0

由於您正在進行ajax調用,所以它不會進入登錄頁面。如果您停止使用ajax,Laravel會自動處理它。或者你將不得不在'ajax error method'上手動重定向到登錄頁面。 – Rakib

回答

0

你必須檢查,如果你的用戶在你的HomeController登錄:

if (Auth::check()) { 
    // The user is logged in, return your response... 
}else{ 
    // The user is not, return a json error to handle with JS 
    // Here you can temporary store the request to execute after login 
} 

如果你不需要阿賈克斯,您可以將驗證的中間件添加到您的路線,並如果用戶未通過身份驗證,它將自動重定向到登錄。登錄後,Laravel自動重定向到初始URL,但我不知道POST請求的行爲,如果您希望停止使用Ajax,這可能是一個很好的起點。

0

您需要使用中間件來確保用戶已通過身份驗證。看起來您已經正確設置了認證系統,現在只需要使用該中間件保護您的路由。該文檔解釋瞭如何做到這一點:

Protecting Routes

所以讀取,您應該瞭解後,你的路線聲明應該是:

Route::post('/backend/newLetter', '[email protected]')->middleware('auth'); 

做到這一點更常見的方式是使路由組,這樣你就不必使用->middleware('auth')每次:

Route::group(['middleware' => 'auth'], function() { 
    // Define protected routes here 
}); 
1

如果您希望將用戶重定向到登錄頁面如果他們沒有通過身份驗證,首先您需要使用身份驗證中間件來保護您的路由。

Route::post('/backend/newLetter', '[email protected]')->middleware('auth'); 

這將導致重定向到http請求的登錄頁面和ajax請求的401 Unauthenticated錯誤。在您使用ajax請求時,您將收到401 Unauthenticated錯誤,因此您需要將用戶重定向回登錄頁面。添加下面的腳本到您的視圖來處理它:

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (exception == 'Unauthorized') { 
     window.location = 'http://yourdomain.com/login';    
    } 
}); 

登錄後,他們會重定向到他們訪問的最後一頁。