Laravel 通过 ajax 授权
Laravel auth via ajax
我为管理 ajax 请求编写控制器。我编写了用于检查用户登录与否的构造方法 if
块工作正常但总是 return user.setting
视图和 return 在构造中不起作用。
控制器:
<?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', 'AjaxController@settings');
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);
}
});
};
您应该使用 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);
}
这看起来像是中间件的工作。
你不应该在你的 AjaxController 的构造函数中做任何事情,相反你应该为你想要保护的路由注册一个中间件:
Route::post('ajax/settings', [
'uses' => 'AjaxController@settings',
'middleware' => 'auth'
]);
由于您可能需要许多 Ajax 函数,因此您可以使用相同的中间件和 "ajax" 前缀将它们全部分组:
Route::group(['prefix' => 'ajax', 'middleware' => 'auth'], function () {
Route::post('settings', 'AjaxController@settings');
//Define more routes here...
});
'auth'是Laravel自带的预置中间件之一,你可以在App\Http\Middleware\Authenticate找到它并根据需要修改,或者注册你自己的"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');
}
您还可以在 routes.php 中的路由上将中间件分配给 运行:
Route::group(['middleware' => 'auth'], function () {
Route::post('ajax/settings', 'AjaxController@settings');
}
我为管理 ajax 请求编写控制器。我编写了用于检查用户登录与否的构造方法 if
块工作正常但总是 return user.setting
视图和 return 在构造中不起作用。
控制器:
<?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', 'AjaxController@settings');
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);
}
});
};
您应该使用 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);
}
这看起来像是中间件的工作。
你不应该在你的 AjaxController 的构造函数中做任何事情,相反你应该为你想要保护的路由注册一个中间件:
Route::post('ajax/settings', [
'uses' => 'AjaxController@settings',
'middleware' => 'auth'
]);
由于您可能需要许多 Ajax 函数,因此您可以使用相同的中间件和 "ajax" 前缀将它们全部分组:
Route::group(['prefix' => 'ajax', 'middleware' => 'auth'], function () {
Route::post('settings', 'AjaxController@settings');
//Define more routes here...
});
'auth'是Laravel自带的预置中间件之一,你可以在App\Http\Middleware\Authenticate找到它并根据需要修改,或者注册你自己的"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');
}
您还可以在 routes.php 中的路由上将中间件分配给 运行:
Route::group(['middleware' => 'auth'], function () {
Route::post('ajax/settings', 'AjaxController@settings');
}