如何在Laravel API路由中控制api_key

时间:2017-12-29 15:12:54

标签: php laravel api

我使用Laravel编写API,我想定义api_key这样的链接

  

http://example.com/api/USER_API_KEY/json/method

API_KEY定义用户是否可以访问API。要实现此问题,我必须检查数据库以查看正在进行的操作。

如何在api.php路径

中实现此功能

api.php

Route::prefix('json')->group(function () {
    Route::match(['get', 'post'], '/', function () {
        return response('No functionality found', 200)
            ->header('Content-Type', 'application/json');
    });

    Route::match(['get', 'post'], '/SingleSend', 'ApiControlller@SingleSend');
});

1 个答案:

答案 0 :(得分:1)

通过在控制台中运行命令来创建中间件:

php artisan make:middleware <MiddlewareName>

此命令在app/Http/Middleware

中创建中间件类

打开中间件类并将逻辑添加到中间件以验证用户令牌。

您将在中间件上定义一个方法handle(),以便检查令牌是否有效。

public function handle($request, Closure $next, $role)
{
   $apiToken = $request->get('token', null);

   //here you can get user token from database and compare with the apiToken

   if(empty($apiToken)){

        return response('forbbiden', 403);
    }
   return $next($request);
}

如果您希望在每个请求上运行中间件,请转到app/Http/kernel.php下的$routeMiddleware并添加您的中间件。

protected $routeMiddleware = [
    ...
    'verify-api-token' => \App\Http\Middleware\YourMiddlwareName::class,
    ...
];

将中间件附加到路线:

Route::prefix('json')->group(['middleware' => 'verify-api-token'], function () {
    Route::match(['get', 'post'], '/', function () {
        return response('No functionality found', 200)
            ->header('Content-Type', 'application/json');
    });

    Route::match(['get', 'post'], '/SingleSend', 'ApiControlller@SingleSend');
});