diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 3a959cc..30d907f 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -17,9 +17,13 @@ class RegisteredUserController extends Controller /** * Menampilkan halaman registrasi. */ - public function create(): View + public function create(Request $request): View { - return view('auth.register'); + // Bagian Pengambilan Role dari URL + $role = $request->query('role', 'siswa'); // Ambil 'role' dari URL, default ke 'siswa' + + // Kirim $role ke view + return view('auth.register', ['role' => $role]); } /** @@ -27,27 +31,52 @@ public function create(): View */ public function store(Request $request): RedirectResponse { - $request->validate([ - 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'lowercase', 'email', 'max:255'], - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - 'role' => ['required', 'in:penjaga perpus,siswa'], - ]); + // Bagian Validasi Dinamis + $role = $request->input('role'); - $user = new User(); - $user->forceFill([ - 'id' => rand(100, 999), + $rules = [ + 'name' => ['required', 'string', 'max:255'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + 'role' => ['required', 'in:siswa,guru'], // Sesuaikan dengan role yang diizinkan + ]; + + // Tambahkan validasi NISN atau NIP berdasarkan role + if ($role === 'siswa') { + $rules['nisn'] = ['required', 'string', 'max:255']; // Tambahkan 'unique:users' jika perlu + } else { // Asumsi 'guru' + $rules['nip'] = ['required', 'string', 'max:255']; // Tambahkan 'unique:users' jika perlu + } + + $request->validate($rules); + + // Bagian Pembuatan User + $userArray = [ + 'id' => rand(100, 999), // ID unik sementara 'nama_lengkap' => $request->name, 'name' => $request->name, - 'email' => $request->email, - 'password' => $request->password, + 'password' => Hash::make($request->password), // Gunakan Hash jika login Anda sudah pakai Hash + // 'password' => $request->password, // Gunakan ini jika login (LoginRequest) masih cek teks biasa 'role' => $request->role, - ]); + ]; + + // Tambahkan field dinamis (NISN/NIP) dan buat email unik palsu + if ($role === 'siswa') { + $userArray['nisn'] = $request->nisn; + $userArray['email'] = $request->nisn . '@smkn1perpus.sch.id'; // Email unik sementara + } else { + $userArray['nip'] = $request->nip; + $userArray['email'] = $request->nip . '@smkn1perpus.sch.id'; // Email unik sementara + } + + $user = new User(); + $user->forceFill($userArray); + // $user->save(); // Aktifkan ini jika menggunakan database event(new Registered($user)); Auth::login($user); + // Bagian Redirect if ($user->role === 'penjaga perpus') { return redirect()->route('admin.dashboard'); } else { diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index 3f85176..fc9d73e 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -52,7 +52,7 @@ public function rules(): array */ public function authenticate(): void { - // Langkah 1: Pastikan pengguna tidak mencoba login terlalu sering (mencegah brute-force). + // Pastikan pengguna tidak mencoba login terlalu sering (mencegah brute-force). $this->ensureIsNotRateLimited(); // Ambil data yang dikirim dari form login. @@ -64,7 +64,7 @@ public function authenticate(): void // Tentukan field mana yang akan menerima pesan error jika gagal (nisn atau email). $errorField = $this->filled('nisn') ? 'nisn' : 'nip'; - // Langkah 2: Cari data pengguna berdasarkan input yang diberikan. + // Cari data pengguna berdasarkan input yang diberikan. if ($this->filled('nisn')) { // Jika form diisi dengan 'nisn', cari pengguna berdasarkan 'nisn'. $userArray = collect($allUsers)->firstWhere('nisn', $this->input('nisn')); @@ -73,14 +73,12 @@ public function authenticate(): void $userArray = collect($allUsers)->firstWhere('nip', $this->input('nip')); } - // Langkah 3: Lakukan Pengecekan Kredensial dan Role. - // Cek #1: Apakah pengguna ditemukan DAN password yang dimasukkan cocok? + // Lakukan Pengecekan Kredensial dan Role. if ($userArray && $userArray['password'] === $inputPassword) { // Cek #2: Jika kredensial benar, apakah role pengguna sesuai dengan form yang digunakan? if (isset($userArray['role']) && $userArray['role'] === $roleDariForm) { - // --- SEMUA SYARAT TERPENUHI --- // Buat objek User dari data dummy. $userModel = new User(); $userArray['name'] = $userArray['nama_lengkap']; @@ -94,7 +92,6 @@ public function authenticate(): void return; // Proses autentikasi berhasil. } else { - // --- KASUS GAGAL: KREDENSIAL BENAR, TAPI ROLE SALAH --- // Tambah hitungan percobaan login yang gagal. RateLimiter::hit($this->throttleKey()); @@ -108,7 +105,6 @@ public function authenticate(): void } } - // --- KASUS GAGAL: KREDENSIAL TIDAK COCOK --- // Jika pengguna tidak ditemukan atau password salah. RateLimiter::hit($this->throttleKey()); throw ValidationException::withMessages([ diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index edef6cb..3eb1e75 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -28,7 +28,7 @@ - + @else
@@ -51,8 +51,19 @@
+ {{-- Link href untuk ke Register --}}

+ @if ($role == 'siswa') + Belum punya akun? + Daftar sebagai Siswa + @else + Belum punya akun? + Daftar sebagai Guru + @endif +

+ +

Kembali ke halaman utama.

- + \ No newline at end of file diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 3809b38..5d65e5c 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -2,11 +2,16 @@
@csrf + {{-- Input tersembunyi untuk mengirimkan peran (role) ke backend --}} + +
-

Buat Akun Siswa

+ {{-- Judul dinamis --}} +

Buat Akun {{ Str::title($role) }}

Daftarkan diri Anda untuk mulai menjelajahi koleksi kami.

+ {{-- Form Nama Lengkap (Umum) --}}
@@ -15,14 +20,26 @@ @enderror
-
- - - @error('nisn') -
{{ $message }}
- @enderror -
+ {{-- Form dinamis (NISN untuk Siswa, NIP untuk Guru) --}} + @if ($role == 'siswa') +
+ + + @error('nisn') +
{{ $message }}
+ @enderror +
+ @else +
+ + + @error('nip') +
{{ $message }}
+ @enderror +
+ @endif + {{-- Form Password (Umum) --}}
@@ -31,20 +48,22 @@ @enderror
+ {{-- Form Konfirmasi Password (Umum) --}}
-
+ {{-- Link Login dinamis --}}

Sudah punya akun? - Masuk di sini + Masuk di sini

\ No newline at end of file