有没有无需用户身份验证即可保护Laravel中某些API路由的方法?

时间:2019-04-10 16:10:49

标签: laravel api

在我的Laravel项目中,我正在存储有关事件的数据并将其返回到网站,该网站是可以预订位置的事件的网站。每个事件都有其自己的网站。我可以获取事件的数据并使用ajax GET和POST保存预订详细信息,效果很好,但是我想保护这些路线,但我不知道该怎么做。

我已经阅读了一些有关Laravel Passport的信息,但事实是这些活动网站不需要注册,一个参与者只要填写一张表格并为自己保留位置即可,Passport的令牌逻辑只能帮助我如果我理解文档正确,是否有经过身份验证的用户。

这些是api路由: 路线:: get('event / {id}','ApiRoutesController @ show'); Route :: post('reserve','ApiRoutesController @ reserve');

我想通过某种方式保护那些路线,以防止人们(如果他们了解我的后方法逻辑)通过无效的预留位置向我的数据库发送垃圾邮件,如果没有Laravel Passport,这可能吗?

2 个答案:

答案 0 :(得分:0)

您始终可以使用身份验证中间件来保护路由,如下所示:

Route::get('event/{id}', function () {
    // Only authenticated users may enter...
})->middleware('auth');

(如Laravel documentation所示)

问题是,您现在需要一种验证用户身份的方法。只有这样,他才能拨打此路线。

您说无法注册...那么,您想如何对使用API​​的人进行身份验证?

我的意思是您需要某种方法来确定哪个请求是合法的,哪个不是合法的。这可能类似于经过身份验证的用户,甚至可能类似于您通过HTTP标头发送的API密钥。您只需要确定要如何设计即可。然后,我们可以为您提供实现方式的帮助。

答案 1 :(得分:0)

Laravel提供了预定义的中间件,您可以assign进行路由,也可以创建自己的custom middleware

对于您而言,我认为Illuminate\Routing\Middleware\ThrottleRequests中间件可能会有用。这样会限制某人在特定时间段内可以从同一IP地址(或使用相同的用户帐户)呼叫路由的次数。

要将其添加到路由中,您需要确保throttle中间件位于routeMiddleware文件的App\Http\Kernel数组中,例如:

protected $routeMiddleware = [
  ... other middleware ...
  'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
  ...
];

然后,您需要将其添加到要保护的路由中,例如:

 Route::get('event/{id}', 'ApiRoutesController@show')->middleware('throttle');

您还可以在middleware函数的参数中指定最大尝试次数和时间段(以分钟为单位),如下所示:

  Route::get('event/{id}', 'ApiRoutesController@show')->middleware('throttle:10,1');