laravel 로그인 오류
조회수 705회
function login(Request $request)
{
$user = $request->only('email', 'password');
if (Auth::attempt($user)) {
// dd(Auth::check()); true 확인완료
return redirect()->route('home');
}
return redirect()->route('login');
}
@if(Auth::check())
<div class="buttons">
<a href="{{ route('register') }}" class="button is-primary is-outlined">
<strong>{{ $name }}</strong>
</a>
<a href="{{ route('api.logout') }}" class="button is-primary is-outlined">
<strong>로그아웃</strong>
</a>
</div>
@else
이렇게 로그인 함수를 만들어서 실행해보면 home로 넘어가는것을 보면 로그인에 성공한것 같은데 redirect로 넘어가면 템플릿에서 Auth::check()에서 false가 떠서 로그인이 안된것처럼 작동합니다. 한번 로그인을 하면 다른 페이지로 넘어가도 로그인이 되도록 하고싶습니다. 어떻게 해야되나요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
와! PHP 개발자다! 답변을 드리자면, 말씀하신 바로 그걸 하기 위해 미들웨어라는 개념이 모던 PHP 웹개발 패러다임에 소개되었습니다.
공식매뉴얼을 보시면 이런 소스가 있습니다.
public function __construct() { $this->middleware('auth'); // 여기서 $this 는 Illuminate\Routing\Controller 를 상속한 인스턴스 }
사실 꼭 생성자에 안넣으셔도 됩니다. 핵심은,
/home
라우트가 만약 "화면 나오기 전에 먼저('중간에') 인증부터 거쳐야 하는" 라우트일 경우,/home
을 담당하는 메소드에 auth 미들웨어를 적용시켜주는 것입니다.그러고 나면,
/home
에 접속할 때마다, 화면을 그리기 전에 auth 미들웨어가 실행됩니다. 적당한 로그인 쿠키가 있는지 그게 서버 세션과 매칭되는지 아직 만료되지는 않았는지 어쩌고 저쩌고 해서, 뭔가 실패하면 로그인 화면으로 넘어가고, 성공하면 그 다음 동작 - 화면 그리기 - 를 하는 거죠.이런 식으로 '여기는 인증이 중간에 먼저 처리되게 하고 싶다' 하는 라우트/메소드마다 auth 미들웨어를 넣으시면, 로그인이 처리될 겁니다. 답변이 되었을는지요?
+ 기본으로 동봉된 인증구현을 개조하고 계신 거 같은데 그러지 마세요. 매뉴얼이 "아주 쉬우니까 걱정하지 말라" 유혹하고 있긴 하지만, 막상 해보면 실무적으로는 비밀번호 찾기, 리셋시키기 등등을 다 건드려야 해서 꽤 번거롭습니다.
댓글 입력