#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
вы можете изменить все, что захотите