선결론
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);
}
}
🚨 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을 직접 미들웨어에서 실행하는 게 아니라, "뷰에서 처리"하도록 만드는 것이 베스트! 🚀
728x90
반응형
'LARAVEL' 카테고리의 다른 글
[PHP] 블레이드 내에서 함수 사용하기 (0) | 2024.11.27 |
---|---|
[PHP] file 테이블 생성 및 데이터 삽입 (0) | 2024.11.26 |
[PHP] JS에서 ajax로 보낸 data 보는 방법 (0) | 2024.11.25 |
[PHP] substr 대신 mb_substr을 사용하는 이유 (0) | 2024.11.20 |
[라라벨] @section('stlye')과 <style></style>의 차이 (0) | 2024.11.19 |