95 lines
2.4 KiB
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');
|
|
}
|
|
}
|