trafficmonitor/app/Controllers/Auth/AuthController.php

69 lines
2.4 KiB
PHP

<?php
namespace App\Controllers\Auth;
use App\Controllers\CommonController;
use App\Entities\UserEntity;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
abstract class AuthController extends CommonController
{
public const PATH = 'auth';
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->addActionPaths(self::PATH);
}
abstract protected function login_process(): UserEntity;
abstract protected function logout_process(): void;
//로그인화면
public function login_form_process(array $viewDatas = []): array
{
return $viewDatas;
}
public function login_form(): string|RedirectResponse
{
try {
//초기화
$action = __FUNCTION__;
$viewDatas = $this->action_init_process($action);
$viewDatas = $this->login_form_process($viewDatas);
return $this->action_post_process($action, $viewDatas);
} catch (\Exception $e) {
$viewDatas[self::ACTION_RESULT] = 'error';
$viewDatas[self::ACTION_MESSAGE] = $e->getMessage();
return $this->action_post_process($action, $viewDatas);
}
}
//로그인처리
public function login(): RedirectResponse
{
try {
$action = __FUNCTION__;
$viewDatas = $this->action_init_process($action);
$this->login_process();
return redirect()->to($this->authService->popPreviousUrl())->with('success', '로그인이 완료되었습니다.');
} catch (\Exception $e) {
return redirect()->back()->withInput()->with('error', $e->getMessage());
// return redirect()->to($this->getMyAuth()->popPreviousUrl())->with('error', $e->getMessage());
}
}
//로그아웃
final public function logout(): RedirectResponse
{
try {
$this->logout_process();
// 홈페이지로 리다이렉트
return redirect()->route('/')->with('error', MESSAGES['LOGOUT']);
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return redirect()->back()->with('error', "로그아웃 중 오류가 발생했습니다.");
}
}
}