Laravel - Route :: post不会要求登录

时间:2017-09-18 15:20:07

标签: php jquery ajax laravel

在我的主页面中,我有一个表单,如果用户进行身份验证,我只需加载数据。发生的事情是我通过ajax提交表单,当用户未经过身份验证时,它在控制台中出错。

它应该要求登录,而不是,我不知道为什么。

这是我发送数据的方式:

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', 'HomeController@newLetter');

我想要的是当用户未经过身份验证时,登录后会进入登录状态。

我该怎么做?

谢谢

3 个答案:

答案 0 :(得分:1)

如果您要将用户重定向到登录页面(如果他们未经过身份验证),首先您需要使用auth中间件保护您的路由。

Route::post('/backend/newLetter', 'HomeController@newLetter')->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';            
    }
});

登录后,他们将重定向回到他们访问过的最后一页。

答案 1 :(得分: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
}

如果您不需要Ajax,可以将Auth中间件添加到您的路由中,如果用户未经过身份验证,它将自动重定向到登录。 Laravel在登录后自动重定向到初始URL,但我不知道POST请求的行为,如果你想停止使用Ajax,这可能是一个很好的起点。

答案 2 :(得分:0)

您需要使用中间件来确保用户已通过身份验证。看起来您已经正确设置了auth系统,现在您只需要使用该中间件保护您的路由。文档说明了如何执行此操作:

Protecting Routes

所以在阅读之后,您应该明白您的路线声明应该是:

Route::post('/backend/newLetter', 'HomeController@newLetter')->middleware('auth');

更常见的方法是制作一个路线组,这样您就不必每次都使用->middleware('auth')

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