'required|min_length[3]|max_length[100]', 'email' => 'required|valid_email|is_unique[users.email]', 'password' => 'required|min_length[8]', ]; if (! $this->validate($rules)) { return redirect()->back()->withInput(); } $userModel = new UserModel(); $data = [ 'name' => $this->request->getPost('name'), 'email' => $this->request->getPost('email'), 'password' => password_hash((string) $this->request->getPost('password'), PASSWORD_DEFAULT), 'role' => 'patient', ]; if (! $userModel->skipValidation(true)->insert($data)) { return redirect()->back()->withInput()->with('error', 'Registration failed. Please try again.'); } $user_id = $userModel->getInsertID(); $patientModel = new PatientModel(); $patientModel->insert(['user_id' => $user_id]); return redirect()->to(site_url('/'))->with('success', 'Account created. You can log in now.'); } public function loginProcess() { $rules = [ 'email' => 'required|valid_email', 'password' => 'required', ]; if (! $this->validate($rules)) { return redirect()->back()->withInput(); } $userModel = new UserModel(); $email = $this->request->getPost('email'); $password = $this->request->getPost('password'); $user = $userModel->where('email', $email)->first(); if ($user && password_verify((string) $password, $user['password'])) { session()->set([ 'id' => $user['id'], 'role' => $user['role'], ]); if ($user['role'] === 'admin') { return redirect()->to(site_url('admin/dashboard')); } if ($user['role'] === 'doctor') { return redirect()->to(site_url('doctor/dashboard')); } return redirect()->to(site_url('patient/dashboard')); } return redirect()->back()->withInput()->with('error', 'Invalid email or password.'); } public function logout() { session()->destroy(); return redirect()->to(site_url('/')); } }