MIF_E31230680/app/Http/Controllers/AuthController.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');
}
}