94 lines
3.0 KiB
PHP
94 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class AuthController extends Controller
|
|
{
|
|
public function showLogin()
|
|
{
|
|
return view('login');
|
|
}
|
|
|
|
public function showRegister()
|
|
{
|
|
return view('register');
|
|
}
|
|
|
|
public function register(Request $request)
|
|
{
|
|
// Tambahkan custom message di parameter kedua validate()
|
|
$request->validate([
|
|
'nama_lengkap' => 'required|string|max:255',
|
|
'username' => 'required|string|unique:users,username',
|
|
'password' => 'required|min:6',
|
|
'alamat' => 'required',
|
|
], [
|
|
'username.unique' => 'Maaf, username ini sudah terdaftar. Silakan buat username lain.',
|
|
'password.min' => 'Kata sandi terlalu pendek, minimal harus 6 karakter.',
|
|
]);
|
|
|
|
User::create([
|
|
'nama_lengkap' => $request->nama_lengkap,
|
|
'username' => $request->username,
|
|
'password' => Hash::make($request->password),
|
|
'alamat' => $request->alamat,
|
|
'role' => 'verifikator', // Default role saat daftar
|
|
'status' => 'nonaktif',
|
|
]);
|
|
|
|
return redirect('/login')->with('success', 'Registrasi berhasil! Akun Anda sedang ditinjau. Silakan hubungi Admin Desa untuk aktivasi.');
|
|
}
|
|
|
|
public function login(Request $request)
|
|
{
|
|
// Validasi input
|
|
$credentials = $request->validate([
|
|
'username' => 'required',
|
|
'password' => 'required',
|
|
]);
|
|
|
|
// 1. Cari user berdasarkan username terlebih dahulu untuk cek statusnya
|
|
$user = \App\Models\User::where('username', $request->username)->first();
|
|
|
|
if ($user) {
|
|
// 2. Cek apakah akun aktif
|
|
if ($user->status !== 'aktif') {
|
|
return back()->with('error', 'Akun Anda belum aktif. Silakan hubungi Admin Desa untuk aktivasi.')->withInput($request->only('username'));
|
|
}
|
|
|
|
// 3. Jika aktif, baru coba lakukan proses login (Auth::attempt)
|
|
if (Auth::attempt($credentials)) {
|
|
$request->session()->regenerate();
|
|
|
|
// Redirect sesuai role
|
|
if ($user->role === 'admin') {
|
|
return redirect()->intended(route('admin.dashboard'));
|
|
}
|
|
|
|
if ($user->role === 'verifikator') {
|
|
return redirect()->intended(route('verifikator.dashboard'));
|
|
}
|
|
}
|
|
}
|
|
|
|
// 4. Jika user tidak ditemukan atau password salah
|
|
return back()->withErrors([
|
|
'username' => 'Username atau password salah.',
|
|
])->withInput($request->only('username'));
|
|
}
|
|
|
|
public function logout(Request $request)
|
|
{
|
|
Auth::logout();
|
|
$request->session()->invalidate();
|
|
$request->session()->regenerateToken();
|
|
|
|
return redirect('/login');
|
|
}
|
|
}
|