Imgur API - Получение & ldquo; Слишком много запросов & rdquo; ошибка, хотя 'X-Ratelimit-Userremaining' не равно 0

Этот пример Как передать несколько параметров промежуточному программному обеспечению с условием ИЛИ в Laravel 5.2

Вместо добавления нескольких аргументов в метод дескриптора и необходимости его обновления каждый раз, когда вы добавляете новая роль в вашем приложении, вы можете сделать ее динамичной.

Middleware

 /**
 * Handle an incoming request.
 *
 * @param $request
 * @param Closure $next
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
 */
public function handle($request, Closure $next) {

    $roles = array_slice(func_get_args(), 2); // [default, admin, manager]

    foreach ($roles as $role) {

        try {

            Role::whereName($role)->firstOrFail(); // make sure we got a "real" role

            if (Auth::user()->hasRole($role)) {
                return $next($request);
            }

        } catch (ModelNotFoundException $exception) {

            dd('Could not find role ' . $role);

        }
    }

    Flash::warning('Access Denied', 'You are not authorized to view that content.'); // custom flash class

    return redirect('/');
}

Маршрут

Route::group(['middleware' => ['role_check:default,admin,manager']], function() {
    Route::get('/user/{user_id}', array('uses' => 'UserController@showUserDashboard', 'as' => 'showUserDashboard'));
});

Это проверит, имеет ли аутентифицированный пользователь по крайней мере, одна из предоставленных ролей, и если это так, передает запрос в следующий стек промежуточного программного обеспечения. Конечно, метод hasRole() и сами роли должны быть реализованы вами.

Вы можете использовать php 5.6

public function handle($request, Closure $next, ...$roles)
{
    foreach ($roles as $role) {

        try {
            if ($request->user()->can($role)) {
              return $next($request);
        }

        } catch (ModelNotFoundException $exception) {
          abort(403);
        }
    }

}

0
задан ortis 29 March 2019 в 14:52
поделиться

1 ответ

Пожалуйста, ознакомьтесь с https://apidocs.imgur.com/#rate-limits , где вы найдете подробную информацию о конкретных ограничениях тарифов API.

Imgur имеет несколько ограничений скорости, в том числе для каждого приложения и ограничения IP-адреса пользователя. Даже если у вас больше кредитов для пользовательских запросов, у приложения больше не будет доступных кредитов, и это может вызвать ограничение скорости для ваших запросов.

Каждый ответ от серверов Imgur содержит заголовки ограничения скорости, которые дадут вам более подробную информацию о установленных вами пределах.

Заголовки ограничения скорости включены в ответы (из документов Imgur API):

  • X-RateLimit-UserLimit - Всего кредитов, которые могут быть выделены.
  • X-RateLimit-UserRemaining - Всего доступных кредитов.
  • X-RateLimit-UserReset - Метка времени (эпоха Unix), когда кредиты будут сброшены.
  • X-RateLimit-ClientLimit - Всего кредитов, которые могут быть выделены для заявки в день.
  • X-RateLimit-ClientRemaining - Всего кредитов, оставшихся для заявки в день.
0
ответ дан Tomasz Kajtoch 29 March 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: