2026-03-30 15:29:29 +05:30

97 lines
2.6 KiB
PHP

<?php
namespace App\Controllers;
use App\Models\UserModel;
use App\Models\PatientModel;
class Auth extends BaseController
{
public function login()
{
return view('auth/login');
}
public function register()
{
return view('auth/register');
}
public function registerProcess()
{
$rules = [
'name' => '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('/'));
}
}