97 lines
2.6 KiB
PHP
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('/'));
|
|
}
|
|
}
|