laravel 로그인 오류

조회수 696회
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 미들웨어를 넣으시면, 로그인이 처리될 겁니다. 답변이 되었을는지요?


    + 기본으로 동봉된 인증구현을 개조하고 계신 거 같은데 그러지 마세요. 매뉴얼이 "아주 쉬우니까 걱정하지 말라" 유혹하고 있긴 하지만, 막상 해보면 실무적으로는 비밀번호 찾기, 리셋시키기 등등을 다 건드려야 해서 꽤 번거롭습니다.

    • 수동으로해도 로그인구현을 해서 쉽다고해서 그랬는데 다음부턴 그냥 만들때부터 --auth줘서 만들어야겠네요 알 수 없는 사용자 2020.6.5 17:38

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)