178 lines
5.6 KiB
PHP
178 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\Facades\Password;
|
|
use Illuminate\Support\Facades\Cookie;
|
|
use Illuminate\Support\Facades\Session;
|
|
|
|
class AuthController extends Controller
|
|
{
|
|
public function showLoginForm()
|
|
{
|
|
return view('auth.login');
|
|
}
|
|
|
|
public function login(Request $request)
|
|
{
|
|
$credentials = $request->only(['username', 'password']);
|
|
|
|
if (Auth::attempt($credentials)) {
|
|
$user = Auth::user();
|
|
|
|
if ($user->role === 'wakil_kepala') {
|
|
return redirect()->intended('/wakil_kepala/dashboard');
|
|
} elseif ($user->role === 'siswa') {
|
|
return redirect()->intended('/siswa/dashboard');
|
|
}
|
|
}
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
'username' => 'required',
|
|
'password' => 'required',
|
|
], [
|
|
'required' => ':attribute harus diisi.',
|
|
]);
|
|
|
|
$userCount = User::where('username', $request->username)->count();
|
|
|
|
if ($validator->fails() || $userCount == 0) {
|
|
// Tambahkan pesan error khusus jika username tidak terdaftar
|
|
$validator->errors()->add('username', 'Akun tidak terdaftar.');
|
|
|
|
return redirect('/login')
|
|
->withErrors($validator)
|
|
->withInput();
|
|
}
|
|
|
|
$remember = true; // Sesuaikan dengan kebutuhan Anda
|
|
|
|
if (Auth::attempt(['username' => $request->username, 'password' => $request->password], $remember)) {
|
|
$user = Auth::user();
|
|
$request->session()->put('user_id', $user->id);
|
|
|
|
// Membuat dan menyimpan token "remember me"
|
|
$token = $user->createToken("auth-token")->plainTextToken;
|
|
$user->update(['remember_token' => $token]);
|
|
|
|
return redirect('/dashboard')->with('success', 'Login berhasil!');
|
|
} else {
|
|
return redirect('/login')
|
|
->withErrors(['username' => 'Username atau password salah.'])
|
|
->withInput();
|
|
}
|
|
}
|
|
|
|
public function showRegisterForm()
|
|
{
|
|
return view('auth.register');
|
|
}
|
|
|
|
public function register(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => ['required', 'min:3', 'max:225'],
|
|
'username' => ['required', 'min:3', 'max:10'],
|
|
'email' => 'required|email',
|
|
'password' => 'required|min:5|max:255',
|
|
], [
|
|
'required' => ':attribute harus diisi.',
|
|
'email' => ':attribute harus berupa email yang valid.',
|
|
'min' => 'panjang :attribute minimal :min karakter.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect('/register')
|
|
->withErrors($validator)
|
|
->withInput();
|
|
}
|
|
|
|
if (User::where('username', $request->username)->exists() || User::where('email', $request->email)->exists()) {
|
|
return redirect('/register')
|
|
->withErrors(['username' => 'Username atau email sudah digunakan.'])
|
|
->withInput();
|
|
}
|
|
|
|
$user = User::create([
|
|
'name' => $request->name,
|
|
'username' => $request->username,
|
|
'email' => $request->email,
|
|
'password' => bcrypt($request->password),
|
|
'role' => 'siswa',
|
|
]);
|
|
|
|
return redirect('/login')->with('success', 'Registrasi berhasil! Silakan login.');
|
|
}
|
|
|
|
public function showResetForm(Request $request, $token = null)
|
|
{
|
|
return view('auth.reset-password')->with(
|
|
['email' => $request->email, 'token' => $token]
|
|
);
|
|
}
|
|
|
|
public function showLinkRequestForm(Request $request)
|
|
{
|
|
return view('auth.forgot-password');
|
|
}
|
|
|
|
// Mengirim email tautan reset password
|
|
public function sendResetLinkEmail(Request $request)
|
|
{
|
|
$request->validate(['email' => 'required|email']);
|
|
|
|
$status = Password::sendResetLink(
|
|
$request->only('email')
|
|
);
|
|
|
|
return $status === Password::RESET_LINK_SENT
|
|
? back()->with(['status' => __($status)])
|
|
: back()->withErrors(['email' => __($status)]);
|
|
}
|
|
|
|
// Menangani proses reset password
|
|
public function resetPassword(Request $request)
|
|
{
|
|
$request->validate([
|
|
'token' => 'required',
|
|
'email' => 'required|email',
|
|
'password' => 'required|confirmed|min:6',
|
|
]);
|
|
|
|
$status = Password::reset(
|
|
$request->only('email', 'password', 'password_confirmation', 'token'),
|
|
function ($user, $password) {
|
|
$user->forceFill([
|
|
'password' => bcrypt($password),
|
|
'remember_token' => Str::random(60),
|
|
])->save();
|
|
// Hapus token "remember me" setelah reset password
|
|
$user->tokens()->delete();
|
|
}
|
|
);
|
|
|
|
return $status == Password::PASSWORD_RESET
|
|
? redirect('/login')->with(['status' => __($status)])
|
|
: back()->withErrors(['email' => [__($status)]]);
|
|
}
|
|
|
|
public function logout(Request $request)
|
|
{
|
|
$guard = 'web'; // Sesuaikan dengan guard yang digunakan
|
|
|
|
// Hapus seluruh cookie sesi
|
|
Session::flush();
|
|
|
|
// Logout pengguna
|
|
Auth::guard($guard)->logout();
|
|
|
|
return redirect('/login')->with('success', 'Terimakasih sudah logout! Silakan login kembali.');
|
|
}
|
|
}
|