45 lines
1.4 KiB
PHP
45 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
|
|
class LegacyAuth
|
|
{
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
// 레거시 세션: 로그인 플래그 + memNo 둘 다 확인
|
|
$loggedIn = (bool) $request->session()->get('_sess._login_', false);
|
|
$memNo = (int) $request->session()->get('_sess._mno', 0);
|
|
|
|
if (!$loggedIn || $memNo <= 0) {
|
|
|
|
// GET만 intended 저장
|
|
if ($request->isMethod('get')) {
|
|
$request->session()->put('url.intended', $request->fullUrl());
|
|
}
|
|
|
|
// JSON을 기대하는 요청이면 JSON 401
|
|
// (fetch/axios는 Accept: application/json 넣으면 expectsJson()이 안정적으로 동작)
|
|
if ($request->expectsJson()) {
|
|
return response()->json([
|
|
'ok' => false,
|
|
'message' => '로그인 정보가 확인되지 않습니다. 다시 로그인해 주세요.',
|
|
'redirect' => route('web.auth.login'),
|
|
], 401);
|
|
}
|
|
|
|
// 일반 웹 요청: 로그인 페이지로
|
|
return redirect()->route('web.auth.login')
|
|
->with('ui_dialog', [
|
|
'type' => 'alert',
|
|
'title' => '안내',
|
|
'message' => '로그인 필요합니다.',
|
|
]);
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|