AuthController.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\UserModel;
  4. class AuthController extends BaseController
  5. {
  6. // Reglas de validación del formulario de inicio de sesión.
  7. private function getValidationRules()
  8. {
  9. return [
  10. 'correo' => 'required|max_length[50]|valid_email|is_not_unique[usuarios.correo,estatus,1]',
  11. 'contrasena' => 'required|max_length[25]|alpha_dash',
  12. ];
  13. }
  14. // Renderiza la página del formulario de inicio de sesión.
  15. public function loginView()
  16. {
  17. helper('form');
  18. return view('auth/login');
  19. }
  20. // Inicia la sesión de un usuario.
  21. public function loginAction()
  22. {
  23. $rules = $this->getValidationRules();
  24. // Obtiene solo los campos permitidos.
  25. $data = $this->request->getPost(array_keys($rules));
  26. // Valida los campos del formulario.
  27. if (! $this->validateData($data, $rules)) {
  28. return redirect()->route('auth.loginView')->withInput();
  29. }
  30. $userModel = model(UserModel::class);
  31. // Consulta la información del usuario.
  32. $user = $userModel->select('idUsuario, contrasena')
  33. ->where('correo', trim($data['correo']))
  34. ->first();
  35. // Valida la contraseña del usuario.
  36. if ($user['contrasena'] !== $data['contrasena']) {
  37. return redirect()->route('auth.loginView')
  38. ->withInput()
  39. ->with('error', 'Acceso no permitido');
  40. }
  41. // Genera la cookie de autenticación (24 horas).
  42. $this->response->setCookie('userAuth', $user['idUsuario'], 60 * 60 * 24);
  43. return redirect()->route('products.index')->withCookies();
  44. }
  45. // Cierra la sesión de un usuario.
  46. public function logoutAction()
  47. {
  48. $this->response->deleteCookie('userAuth');
  49. session()->remove('userAuth');
  50. return redirect()->route('auth.loginView')->withCookies();
  51. }
  52. }