通过ajax的Laravel身份验证
问题描述:
我为管理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);
}
});
};
答
这看起来像中间件的工作。
你不应该在你的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);
}
答
您应该使用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);
}
答
你为什么不使用Middleware?
你的构造应该是:
public function __construct() {
$this->middleware('auth');
}
还可以指定中间件在routes.php文件的路线上运行:
Route::group(['middleware' => 'auth'], function() {
Route::post('ajax/settings', '[email protected]');
}