Заголовок промежуточного программного обеспечения не работает с laravel 7

#php #laravel

#php #laravel

Вопрос:

Ниже приведен мой код;

Маршрут =>

 Route::get('displayImage', function () {
return response()->file('uploads/sss.png');
})->middleware(['myHeader']);
  

MyHeader =>

 class AddHeaders
{
/**
 * Handle an incoming request.
 *
 * @param Request $request
 * @param Closure $next
 * @return mixed
 */


  public function handle(Request $request, Closure $next)
  {
    if ($request->header('token') != '123'
    || $request->header('token1') != '1234') {
        return response([
            "status" => false,
            "message" => "unauthorized"
        ]);
    }
    return $next($request);
}
  

}

Kernal.php

     protected $routeMiddleware = [
    'myHeader' => AddHeaders::class,
    'age' => CheckAuth::class,
    ];
  

Если я не добавлю заголовок в postman, он вернет мне изображение; мой заголовок не работает. Пожалуйста, помогите.

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

1. вы зарегистрировали свой промежуточный файл в kernal.php .?

2. Да, но маршрут также работает, даже если я не добавляю заголовок в postman @KamleshPaul

3. Я также повторяю в файле заголовка, и он печатается при доступе к URL в браузере

4. итак, вы хотите защитить этот маршрут, если кто-то не добавит этот заголовок, то выдаст ошибку, которую вы хотите?

5. Да, я хочу, чтобы, если кто-либо не передаст заголовок в postman, чем route выдаст ошибку. Я хочу передать пользовательский массив заголовков. пожалуйста, посмотрите мой код и предложите мне @KamleshPaul

Ответ №1:

Вам нужно проверить, имеет ли запрос заголовок, используя

 $request->headers->has('your_header');
  

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

 <?php

class AddHeaders
{
/**
 * Handle an incoming request.
 *
 * @param Request $request
 * @param Closure $next
 * @return mixed
 */


  public function handle(Request $request, Closure $next)
  {
    $has_token = $request->headers->has('token');
    $has_token1 = $request->headers->has('token1');

    if($has_token amp;amp; $request->header('token') != '123' ||
        $has_token1 amp;amp; $request->header('token1') != '1234' ||
        !$has_token || !$has_token1){
         return response([
            "status" => false,
            "message" => "unauthorized"
        ]);
    }

    return $next($request);
}
  

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

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

2. @VishalVaishnav Хорошо, вы не упомянули об этом в своем вопросе. В любом случае, обновлено.

Ответ №2:

в вашем коде вы просто добавляете новый заголовок, который вы не защищаете, так как вот код для этого от postman

вам нужно передать

в заголовке

 key           | value

token | 123
or
token1 | 1234
  

таким образом, ваш маршрут защитит

 class AddHeaders
{
    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */


    public function handle(Request $request, Closure $next)
    {
        if ($request->header('token') == '123'   || $request->header('token1') == '1234') {
            return $next($request);
        }

        return response([
            "status" => false,
            "message" => "unauthorized"
        ]);
    }
}


  

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

1. и как я могу добавить два заголовка вместе? просто добавьте with и условие в оператор if ?

2. вы должны добавить заголовок из postman, и в sever он проверит, правильный заголовок или нет

3. но как я могу добавить второй заголовок означает массив заголовков?

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

5. @VishalVaishnav да, 123 вы можете изменить все, что захотите