gpt4 book ai didi

laravel - 如何防止Laravel路由被直接访问(即非ajax请求)

转载 作者:行者123 更新时间:2023-12-02 04:43:48 26 4
gpt4 key购买 nike

在我的项目中,我纯粹使用 Laravel 作为后端 api,所有前端均由 Angular javascript 处理。目前,Laravel 路由可以直接访问,它会输出浏览器中显示的所有 Json 数据。我想对其进行限制,以便 Laravel 只响应 Ajax 请求,而不响应其他请求。

我读了这篇文章here它有一个针对 Laravel 4 的解决方案,即在 filter.php 中添加限制。但从 Laravel 5.1 开始,不再使用过滤器,我相信中间件也可以用来做同样的事情。但是,我不确定如何继续将 SO 答案中的 Laravel 4 解决方案从过滤器更改为中间件。

有人可以分享一下如何防止 Laravel 5.1 路由被直接访问吗?

使用 filter.php 的 Laravel 4 解决方案:在 filter.php 中声明此过滤器:

Route::filter('isAJAX', function()
{
if (!Request::AJAX()) return Redirect::to('/')->with(array('route' => Request::path()));
});

然后将您只想通过 AJAX 访问的所有路由放入一个组中。在你的routes.php中:

Route::group(array('before' => 'isAJAX'), function()
{
Route::get('contacts/{name}', ContactController@index); // Or however you declared your route

... // More routes
});

最佳答案

使用以下内容创建中间件文件app/Http/Middleware/OnlyAjax.php:

<?php 

namespace App\Http\Middleware;

class OnlyAjax
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, \Closure $next)
{
if ( ! $request->ajax())
return response('Forbidden.', 403);

return $next($request);
}
}

然后在文件 app/Http/Kernel.php

中注册您的中间件
<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
//... your original code
];

/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
//... your original code
'ajax' => \App\Http\Middleware\OnlyAjax::class,
];
}

最后将中间件附加到您希望只能通过 AJAX 访问的任何路由或路由组。即:

/// File: routes/web.php

// Single route
Route::any('foo', 'FooController@doSomething')->middleware('ajax');

// Route group
Route::middleware(['ajax'])->group(function () {
// ...
});

关于laravel - 如何防止Laravel路由被直接访问(即非ajax请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32584700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com