我使用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');
});
答案 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');
});