MIF_E31221259/app/Http/Controllers/Auth/LoginController.php

84 lines
2.1 KiB
PHP

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class LoginController extends Controller
{
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
$request->validate([
'login' => 'required',
'password' => 'required|min:6',
]);
// Tentukan apakah input login berupa email atau NIM
$loginInput = $request->login;
$isEmail = filter_var($loginInput, FILTER_VALIDATE_EMAIL);
// Validasi panjang NIM jika bukan email
if (!$isEmail && strlen($loginInput) < 4) {
return back()->withErrors([
'login' => 'NIM minimal 4 karakter',
])->withInput();
}
Log::info('Login attempt', [
'login' => $loginInput,
'ip' => $request->ip()
]);
$remember = $request->has('remember');
// Cari user berdasarkan email atau nim
$user = \App\Models\User::where('email', $loginInput)
->orWhere('nim', $loginInput)
->first();
if ($user && \Hash::check($request->password, $user->password)) {
Auth::login($user, $remember);
$request->session()->regenerate();
Log::info('User authenticated', [
'id' => $user->id,
'email' => $user->email,
'nim' => $user->nim ?? null,
'role' => $user->role
]);
if ($user->role === 'admin') {
return redirect()->route('admin.dashboard');
} elseif ($user->role === 'user') {
return redirect()->route('user.dashboard');
}
return redirect('/')->with('error', 'Undefined user role');
}
return back()->withErrors([
'login' => 'NIM atau Email atau Password salah'
])->withInput();
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('/login');
}
}