Files
PiAPS_University_Web/University.Web/app/Http/Controllers/AuthController.php

95 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Client\ConnectionException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
class AuthController extends Controller
{
protected string $apiBaseUrl;
public function __construct()
{
$this->apiBaseUrl = 'http://127.0.0.1:8000/api';
}
public function showLoginForm()
{
return view('auth.login');
}
public function showVerifyForm()
{
if (!session('user_id')) {
return redirect()->route('login');
}
return view('auth.verify-2fa');
}
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$response = Http::post("{$this->apiBaseUrl}/employee/login", [
'email' => $request->email,
'password' => $request->password,
]);
if ($response->successful()) {
$data = $response->json();
session(['user_id' => $data['user_id']]);
return redirect()->route('verify-2fa');
}
return back()->withErrors([
'email' => $response->json()['error'] ?? 'Invalid credentials',
]);
}
public function verify(Request $request)
{
$request->validate([
'code' => 'required|digits:6',
]);
$response = Http::post("{$this->apiBaseUrl}/employee/verify-2fa", [
'user_id' => session('user_id'),
'code' => $request->code,
]);
if ($response->successful()) {
$data = $response->json();
Session::put([
'api_token' => $data['token'],
'user_id' => $data['user']['id'] ?? null,
'user_name' => $data['user']['name'] ?? null,
'user_role' => $data['user']['roles_id'] ?? null,
]);
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'code' => $response->json()['error'] ?? 'Invalid verification code',
]);
}
/**
* @throws ConnectionException
*/
public function logout(Request $request)
{
$response = Http::withToken(Session::get('api_token'))
->post("{$this->apiBaseUrl}/employee/logout");
$request->session()->invalidate();
return redirect('/login');
}
}