refactor: form login added option register with adjust RegisteredUserController
This commit is contained in:
parent
9cd6fd3dd2
commit
34168d5d53
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<label for="nisn" class="form-label">Nomor Induk Siswa Nasional (NISN)</label>
|
||||
<input id="nisn" class="form-control" type="text" name="nisn" required autofocus />
|
||||
<x-input-error :messages="$errors->get('nisn')" class="mt-2" />
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="mb-3">
|
||||
<label for="nip" class="form-label">Nomor Induk Pegawai (NIP)</label>
|
||||
|
|
@ -51,8 +51,19 @@
|
|||
<button type="submit" class="btn btn-primary">Masuk</button>
|
||||
</div>
|
||||
|
||||
{{-- Link href untuk ke Register --}}
|
||||
<p class="mt-4 text-center text-muted small">
|
||||
@if ($role == 'siswa')
|
||||
Belum punya akun?
|
||||
<a href="{{ route('register', ['role' => 'siswa']) }}" class="fw-semibold text-decoration-none">Daftar sebagai Siswa</a>
|
||||
@else
|
||||
Belum punya akun?
|
||||
<a href="{{ route('register', ['role' => 'guru']) }}" class="fw-semibold text-decoration-none">Daftar sebagai Guru</a>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
<p class="mt-3 text-center text-muted small">
|
||||
Kembali ke <a href="/" class="fw-semibold text-decoration-none">halaman utama</a>.
|
||||
</p>
|
||||
</form>
|
||||
</x-guest-layout>
|
||||
</x-guest-layout>
|
||||
|
|
@ -2,11 +2,16 @@
|
|||
<form method="POST" action="{{ route('register') }}">
|
||||
@csrf
|
||||
|
||||
{{-- Input tersembunyi untuk mengirimkan peran (role) ke backend --}}
|
||||
<input type="hidden" name="role" value="{{ $role }}">
|
||||
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="fw-bold text-primary">Buat Akun Siswa</h3>
|
||||
{{-- Judul dinamis --}}
|
||||
<h3 class="fw-bold text-primary">Buat Akun {{ Str::title($role) }}</h3>
|
||||
<p class="text-muted">Daftarkan diri Anda untuk mulai menjelajahi koleksi kami.</p>
|
||||
</div>
|
||||
|
||||
{{-- Form Nama Lengkap (Umum) --}}
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Nama Lengkap</label>
|
||||
<input id="name" class="form-control bg-body-tertiary @error('name') is-invalid @enderror" type="text" name="name" value="{{ old('name') }}" required autofocus autocomplete="name" />
|
||||
|
|
@ -15,14 +20,26 @@
|
|||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="nisn" class="form-label">Nomor Induk Siswa Nasional (NISN)</label>
|
||||
<input id="nisn" class="form-control bg-body-tertiary @error('nisn') is-invalid @enderror" type="text" name="nisn" value="{{ old('nisn') }}" required autocomplete="username" />
|
||||
@error('nisn')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
{{-- Form dinamis (NISN untuk Siswa, NIP untuk Guru) --}}
|
||||
@if ($role == 'siswa')
|
||||
<div class="mb-3">
|
||||
<label for="nisn" class="form-label">Nomor Induk Siswa Nasional (NISN)</label>
|
||||
<input id="nisn" class="form-control bg-body-tertiary @error('nisn') is-invalid @enderror" type="text" name="nisn" value="{{ old('nisn') }}" required autocomplete="username" />
|
||||
@error('nisn')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
@else
|
||||
<div class="mb-3">
|
||||
<label for="nip" class="form-label">Nomor Induk Pegawai (NIP)</label>
|
||||
<input id="nip" class="form-control bg-body-tertiary @error('nip') is-invalid @enderror" type="text" name="nip" value="{{ old('nip') }}" required autocomplete="username" />
|
||||
@error('nip')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Form Password (Umum) --}}
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input id="password" class="form-control bg-body-tertiary @error('password') is-invalid @enderror" type="password" name="password" required autocomplete="new-password" />
|
||||
|
|
@ -31,20 +48,22 @@
|
|||
@enderror
|
||||
</div>
|
||||
|
||||
{{-- Form Konfirmasi Password (Umum) --}}
|
||||
<div class="mb-3">
|
||||
<label for="password_confirmation" class="form-label">Konfirmasi Password</label>
|
||||
<input id="password_confirmation" class="form-control bg-body-tertiary" type="password" name="password_confirmation" required autocomplete="new-password" />
|
||||
</div>
|
||||
|
||||
<div class="d-grid mt-4">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Daftar
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{-- Link Login dinamis --}}
|
||||
<p class="mt-4 text-center text-muted small">
|
||||
Sudah punya akun?
|
||||
<a href="{{ route('login') }}" class="fw-semibold text-decoration-none">Masuk di sini</a>
|
||||
<a href="{{ route('login', ['role' => $role]) }}" class="fw-semibold text-decoration-none">Masuk di sini</a>
|
||||
</p>
|
||||
</form>
|
||||
</x-guest-layout>
|
||||
Loading…
Reference in New Issue