LARAVEL

미들웨어에서 alert 안될 때

litzoo 2025. 2. 10. 09:50

선결론

alert를 return에 함께 맥여야 한다

if (!$request->session()->has('user_name')) {
	return redirect('/onlyMember')->with('error', '로그인을 해주세요');
}

 


라라벨 프로젝트 중,

로그인을 하지 않으면 유저를 튕겨내려는 작업을 하고 있었다

미들웨어를 이용중에, alert를 아무리 띄우려고 해도 되지 않던것..!

class MemberMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        if (!$request->session()->has('user_name')) {
        	echo "<script>alert('왜안나와!')<script>"; // 안나옴
            alert("이것도안나와"); // 안나옴
            return redirect('/onlyMember');
        }
        return $next($request);
    }
}

출처 https://www.etsy.com/listing/1104468524/script-alert-1-xss-sticker


🚨 echo "<script>alert('로그인을 해주세요')</script>"; 가 실행되지 않는 이유!

🚫 Laravel 미들웨어에서는 return redirect()가 실행되면, 그 전에 echo한 내용이 출력되지 않습니다.


✅ 1. alert()이 동작하지 않는 이유

미들웨어에서 redirect()가 실행되면, Laravel이 HTTP 응답을 조작하기 때문에 echo로 출력한 HTML/JS 코드가 무시됩니다.

💡 즉, 브라우저는 <script>alert('로그인을 해주세요')</script>를 전혀 받지 못함!


✅ 2. 해결 방법 (Redirect 후 Alert 띄우기)

🔹 (1) with() 세션 플래시 메시지 사용 (추천)

redirect()->with()를 사용하여 뷰에서 alert을 실행하도록 변경하세요.

📌 수정된 MemberMiddleware.php

public function handle(Request $request, Closure $next)
{
    if (!$request->session()->has('user_name')) {
        return redirect('/onlyMember')->with('error', '로그인을 해주세요');
    }

    return $next($request);
}
 

📌 member.blade.php에서 alert 추가

@if(session('error'))
    <script>alert("{{ session('error') }}");</script>
@endif

뷰에서 alert을 실행하기 때문에 제대로 동작!


🚀 결론

✅ echo "<script>alert('로그인을 해주세요')</script>"; → ❌ 미들웨어에서는 무시됨!
✅ redirect()->with('error', '로그인을 해주세요'); → 뷰에서 alert 실행 가능! (⭐ 추천)

 

💡 Laravel에서는 alert을 직접 미들웨어에서 실행하는 게 아니라, "뷰에서 처리"하도록 만드는 것이 베스트! 🚀

 

출처 https://www.hostinger.com/tutorials/php-redirect

 

728x90
반응형