Добавить данные об авторизации при каждом запросе к API в Laravel

Создаем Middleware командой php artisan make:middleware appendAuthDataToEachResponce

namespace App\Http\Middleware;

use Auth;
use Closure;
use Illuminate\Http\Request;

class appendAuthDataToEachResponce {

  public function share(Request $request) {
    $permissions = [];
    $user = Auth::user() ?: [];
    if($user){
      $permissions = Auth::user()->getAllPermissions()->pluck("name");
    }
    return [
      // 'errors' => function () use ($request) {
      //   return $this->resolveValidationErrors($request);
      // },
      'auth' => [
        'user' => $user,
        'permissions' => $permissions
      ]
    ];
  }
  
  
  public function handle(Request $request, Closure $next) {
    $response = $next($request);
    $content = json_decode($response->content(), true);

    //Check if the response is JSON
    if (json_last_error() == JSON_ERROR_NONE) {
      $response->setContent(json_encode(
          array_merge(
            ['props' => $content],
            $this->share($request)
        )
      ));
    }
    return $response;
  }
  
  // // Возможно иногда может потребоваться перезаписать входной параметр data в axios. Код для JS:
  // const axiosInstance = axios.create({
  //   baseURL: "http://127.0.0.1:8000/",
  //   headers: {
  //     "Content-Type": "application/json"
  //   },
  //   transformResponse: axios.defaults.transformResponse.concat(data => {
  //     return data.props;
  //   })
  // });


  // public function resolveValidationErrors(Request $request) {
  //   if (!$request->session()->has('errors')) {
  //     return (object) [];
  //   }

  //   return (object) collect($request->session()->get('errors')->getBags())->map(function ($bag) {
  //     return (object) collect($bag->messages())->map(function ($errors) {
  //       return $errors[0];
  //     })->toArray();
  //   })->pipe(function ($bags) use ($request) {
  //     if ($bags->has('default') && $request->header('x-inertia-error-bag')) {
  //       return [$request->header('x-inertia-error-bag') => $bags->get('default')];
  //     } elseif ($bags->has('default')) {
  //       return $bags->get('default');
  //     } else {
  //       return $bags->toArray();
  //     }
  //   });
  // }
}

В файл App\Http\Kernel.php, в $middlewareGroups['api'] добавляем строку

\App\Http\Middleware\appendAuthDataToEachResponce::class

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Наш сайт использует куки, нажмите «ОК» если вы не против
OK