Как я могу передать переменную внутри промежуточного программного обеспечения с помощью Laravel?

#laravel #api

#laravel #API

Вопрос:

Привет, я пытаюсь создать свое собственное и очень простое промежуточное программное обеспечение api token, поэтому у меня есть промежуточное программное обеспечение:

 <?php

namespace AppHttpMiddleware;

use Closure;

use AppApiUser;

class ApiAuth
{

  public function handle($request, Closure $next)
  {
      $api_user_count = ApiAuth::where('api_token', $request->api_token)->count();

      if($api_user_count > 0)
      {
          abort(403, "Auth failed");
      }
    
      return $next($request);
  }
}
  

И у меня есть контроллер, где я использую промежуточное программное обеспечение следующим образом:

 /**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('apiauth');
}
  

НО мне нужно отправить токен внутри промежуточного программного обеспечения, потому что мне нужно проверить в базе данных, существует ли он, интересно, как я могу это сделать?

Спасибо!

Комментарии:

1. зачем вам нужно передавать переменную? единственная переменная, которую вы используете там, взята из запроса

Ответ №1:

есть третий параметр для функции handle, который вы можете передать внутри :

  public function handle($request, Closure $next,$var)
  {
      $api_user_count = ApiAuth::where('api_token', $request->api_token)->count();

      if($api_user_count > 0)
      {
          abort(403, "Auth failed");
      }
    
      return $next($request);
  }
  

этот способ передачи переменной в промежуточном программном обеспечении :

 public function __construct()
{
    $this->middleware('apiauth:'.$var);
}
  

Комментарии:

1. Интересно, почему промежуточное программное обеспечение не прерывается? Я имею в виду, что я отправляю пустую переменную, и она должна сказать, что сбой аутентификации, но это не работает, почему вы думаете, что это может произойти? Спасибо