AuthMiddleware.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Middlewares\Web;
  3. use App\Utils\Api;
  4. use App\Utils\Url;
  5. use PH7\JustHttp\StatusCode;
  6. class AuthMiddleware
  7. {
  8. /*
  9. * Comprueba la cookie de autenticación del usuario.
  10. */
  11. public function verify($req, $res)
  12. {
  13. $token = $req->cookies['userAuth'] ?? null;
  14. if (empty($token)) {
  15. $res->redirect(Url::build('login'), StatusCode::FOUND);
  16. }
  17. Api::setAuth($token);
  18. $client = Api::client();
  19. /*
  20. * Realiza la petición de consulta de
  21. * la información del usuario autenticado.
  22. */
  23. $response = $client->get('v1/auth/me');
  24. $body = json_decode($response->body ?? '', true);
  25. $userAuth = $body['data'] ?? [];
  26. // Comprueba el cuerpo de la petición.
  27. if (empty($response->success) || empty($userAuth)) {
  28. // Envía el mensaje de error de la petición.
  29. $req->session['error'] = $body['error'] ?? 'Your session has expired';
  30. $res->redirect(Url::build('logout', StatusCode::FOUND));
  31. }
  32. /*
  33. * Se pasa la variable $req->app->local('userAuth')
  34. * dentro de los controladores y middlewares
  35. * con la información del usuario autenticado.
  36. */
  37. $req->app->local('userAuth', $userAuth);
  38. }
  39. /*
  40. * Redirecciona a una URL si existe la cookie de autenticación del usuario.
  41. */
  42. public function redirect($req, $res)
  43. {
  44. $token = $req->cookies['userAuth'] ?? null;
  45. if (!empty($token)) {
  46. $res->redirect(Url::build('notes'), StatusCode::FOUND);
  47. }
  48. }
  49. }