[add] Feature Login with Nis

This commit is contained in:
Zhaqian Rouf Alfauzi 2025-02-10 11:36:11 +07:00
parent 9076f69198
commit f9d05450d9
2 changed files with 51 additions and 48 deletions

View File

@ -18,37 +18,33 @@ public function showLogin()
}
/**
* Proses login.
* Proses login (bisa dengan Email atau NIS).
*/
public function login(Request $request)
{
// Validasi input
$request->validate([
'email' => 'required|email',
'password' => 'required',
'identifier' => 'required', // Bisa Email atau NIS
'password' => 'required',
]);
// Ambil kredensial
$credentials = $request->only('email', 'password');
// Coba autentikasi menggunakan Email atau NIS
$credentials = [
filter_var($request->identifier, FILTER_VALIDATE_EMAIL) ? 'email' : 'nis' => $request->identifier,
'password' => $request->password,
];
// Coba autentikasi menggunakan kredensial
if (Auth::attempt($credentials)) {
// Regenerasi session untuk menghindari session fixation
$request->session()->regenerate();
// Ambil data user yang telah login
$user = Auth::user();
// Redirect sesuai role user
if ($user->role === 'admin') {
return redirect()->route('admin.dashboard')->with('success', 'Selamat datang Admin!');
} else {
return redirect()->route('dashboardSantri')->with('success', 'Selamat datang Santri!');
}
// Redirect berdasarkan role
return $user->role === 'admin'
? redirect()->route('admin.dashboard')->with('success', 'Selamat datang Admin!')
: redirect()->route('dashboardSantri')->with('success', 'Selamat datang Santri!');
}
// Jika autentikasi gagal, kembalikan ke halaman login dengan error
return back()->withErrors(['email' => 'Email / Password salah.']);
return back()->withErrors(['identifier' => 'NIS/Email atau Password salah.']);
}
/**
@ -76,30 +72,30 @@ public function showRegister()
*/
public function register(Request $request)
{
// Validasi input pendaftaran
// Validasi input
$request->validate([
'name' => 'required|string|max:255',
'nis' => 'required|string|max:50|unique:users,nis',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6',
'jenis_kelamin' => 'required|in:Laki-laki,Perempuan',
'asal_daerah' => 'required|in:dalamProvinsi,luarProvinsi',
'name' => 'required|string|max:255',
'nis' => 'required|string|max:50|unique:users,nis',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6',
'jenis_kelamin' => 'required|in:Laki-laki,Perempuan',
'asal_daerah' => 'required|in:dalamProvinsi,luarProvinsi',
]);
// Buat user baru dengan role "santri"
// Buat user baru
$user = User::create([
'name' => $request->name,
'nis' => $request->nis,
'email' => $request->email,
'password' => Hash::make($request->password),
'role' => 'santri',
'jenis_kelamin' => $request->jenis_kelamin,
'asal_daerah' => $request->asal_daerah,
'name' => $request->name,
'nis' => $request->nis,
'email' => $request->email,
'password' => Hash::make($request->password),
'role' => 'santri',
'jenis_kelamin' => $request->jenis_kelamin,
'asal_daerah' => $request->asal_daerah,
]);
// Login user secara otomatis
// Login otomatis setelah register
Auth::login($user);
return redirect()->route('dashboardSantri')->with('success', 'Pendaftaran Santri berhasil!');
return redirect()->route('dashboardSantri')->with('success', 'Pendaftaran berhasil!');
}
}

View File

@ -1,6 +1,7 @@
@extends('layouts.app-none')
@section('title', 'Login | SR Klasifikasi')
@section('content')
<section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
<div class="container">
<div class="row justify-content-center">
@ -20,29 +21,35 @@
{{-- Tampilkan error jika ada --}}
@if($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
<script>
Swal.fire({
icon: 'error',
title: 'Oops...',
text: "{{ $errors->first() }}",
confirmButtonColor: '#d33'
});
</script>
@endif
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
<script>
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: "{{ session('success') }}",
confirmButtonColor: '#28a745'
});
</script>
@endif
<form class="row g-3 needs-validation" action="{{ route('login.post') }}" method="POST"
novalidate>
@csrf
<div class="col-12">
<label for="emailUser" class="form-label">Email</label>
<label for="identifier" class="form-label">NIS / Email</label>
<div class="input-group has-validation">
<input type="text" name="email" class="form-control" id="emailUser" required>
<div class="invalid-feedback">Masukkan Email Anda</div>
<input type="text" name="identifier" class="form-control" id="identifier" required>
<div class="invalid-feedback">Masukkan NIS atau Email Anda</div>
</div>
</div>
@ -51,7 +58,6 @@
<div class="input-group has-validation">
<input type="password" name="password" class="form-control" id="passwordUser"
required>
<!-- Tombol toggle untuk show/hide password -->
<button class="btn btn-outline-secondary" type="button" id="togglePassword">
<i class="bx bx-show"></i>
</button>
@ -94,4 +100,5 @@
}
});
</script>
@endsection