2015-10-05 223 views
0

我爲管理ajax請求編寫控制器。我編寫了用於檢查用戶登錄的構造方法if阻止工作正常但總是返回user.setting查看並返回構造不工作。通過ajax的Laravel身份驗證

控制器:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Auth; 

class AjaxController extends Controller { 

    public function __construct() { 
     if (Auth::check() == FALSE) { 
      return view('errors.notLogin'); 
     } 
    } 

    public function settings() { 
     return view('user.setting'); 
    } 

} 

路線:

Route::post('ajax/settings', '[email protected]'); 

JS:

acc_settings = function (url) { 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
    }); 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: 'settings=settings', 
     success: function (data) { 
      $("#ajax").html(data); 
     } 
    }); 
}; 

回答

2

這看起來像中間件的工作。

Laravel Docs on Middleware

你不應該在你的AjaxController的構造做什麼,而不是你應該註冊路線中間件要保護:

Route::post('ajax/settings', [ 
    'uses' => '[email protected]', 
    'middleware' => 'auth' 
]); 

因爲你可能需要多Ajax功能,您可以用同一個中間件將它們全部組合起來,而用「ajax」作爲前綴:

Route::group(['prefix' => 'ajax', 'middleware' => 'auth'], function() { 
    Route::post('settings', '[email protected]'); 
    //Define more routes here... 
}); 

'auth'是Laravel提供的預設中間件之一,您可以在App \ Http \ Middleware \中找到它,根據需要進行身份驗證和修改,或註冊您自己的「Ajax」中間件。在這兩種情況下,你的處理函數看起來像:

public function handle($request, Closure $next) 
{ 
    if ($this->auth->guest()) { 
     return view('errors.notLogin'); 
    } 

    return $next($request); 
} 
3

您應該使用middleware而不是重新實現該功能。

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

然後裏面auth你可以添加這兩種情況下對Ajax &普通HTTP請求 -

public function handle($request, Closure $next) 
{ 

    if ($this->auth->guest()) 
    { 
     if ($request->ajax()) 
     { 
      return view('errors.notLogin'); 
     } 
     else 
     { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    return $next($request); 
} 
0

你爲什麼不使用Middleware

你的構造應該是:

public function __construct() { 
    $this->middleware('auth'); 
} 

還可以指定中間件在routes.php文件的路線上運行:

Route::group(['middleware' => 'auth'], function() { 
    Route::post('ajax/settings', '[email protected]'); 
}