Tập 10: VIII. Giới hạn truy cập (Rate limit) (ok)

https://viblo.asia/p/tap-10-routing-laravel-Qpmlew4oKrd

VIII. Giới hạn truy cập (Rate limit)

Thông thường ta hay ứng dụng giới hạn truy cập cho REST API, hoặc ngăn chặn tấn công DDoS. Laravel cung cấp cho chúng ta một middleware có thể làm được việc này, đó là throttle. Bạn có thể tìm thấy nó được khai báo ở app/Http/Kernel.php.

protected $routeMiddleware = [
// ..

    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    
// ..
];

Chẳng hạn giờ các bạn muốn client chỉ truy xuất được dữ liệu từ API chỉ 5 lần trong 1 phút thì bạn có thể định nghĩa route như sau:

Route::middleware('throttle:5,1')->group(function () {
    Route::get('api/user', function () {
        //
    });
});

Trong đó: throtte:5,1 có nghĩa là chỉ cho phép gửi request 5 lần/1 phút.

Giờ các bạn thử truy cập http://localhost:8000/api/user và refresh quá 5 lần xem, một trang lỗi 429 sẽ được trả về.

Các bạn thử đợi trong 1 phút, ta có thể truy cập lại được đấy.

Bạn có thể thay thế số lần truy cập giới hạn bằng một tham số khi model User đã được xác thực (tức là đã đăng nhập) bằng cách khai báo trong model User thuộc tính rate_limit, lúc này bạn có thể thay thế số lần cho phép truy cập bằng rate_limit.

public $rate_limit = 5;
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

Ứng dụng của trường hợp này nếu bạn đang xây dựng trang API có phí, tức là tài khoản dùng thử sẽ giới hạn 10/1 phút và tài khoản có trả phí được 100/1 phút chẳng hạn.

Do hiện giờ ta chưa học "Middleware" và "Authentication" nên không thể test được vì yêu cầu phải thực hiện login user. Các bạn có thể tự kiểm chứng vấn đề này trong những tập sau.

IX. Truy cập

Last updated