如何在Laravel API路由中控制api_key

问题描述 投票:0回答:1

我使用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');
});
php laravel api
1个回答
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');
});
© www.soinside.com 2019 - 2024. All rights reserved.