9Cells

로그인 후 되돌아오는 링크 만들기

로그인이 필요한 페이지에서 로그인 후 다시 원래 페이지로 돌아오는 기능의 구현방법을 알아봅시다.

Laravel에서 이 기능은 일정부분 기본으로 지원됩니다. 페이지 접근에 로그인이 필요하여 라라벨이 직접 로그인 페이지를 보여준 경우에는 로그인 후 원래 페이지로 이동합니다. 하지만 사용자가 로그인 페이지로 직접 이동을 하는 경우에는 원래 페이지로 돌아오는 기능을 제공하지 않습니다. 예를 들어, 로그인 없이 접근 가능한 어떤 페이지에서 일부 기능만 로그인을 필요로 하고 따라서 로그인 페이지로 이동하는 링크를 제공하는 경우, 그 링크로 이동하여 로그인을 해도 원래 페이지로 자동으로 돌아오지 않습니다.

원래 페이지로 이동하기 기능 구현은 다음 세 가지 처리를 하여 단순하게 구현할 수 있습니다.

이제 소스코드를 살펴봅시다.

로그인 페이지 링크에 돌아올 url 넘기기

<a href="/login?back=<돌아갈 페이지의 url>">로그인</a>

로그인 페이지로 이동하는 링크에 돌아올 페이지의 url을 전달합니다.

로그인 폼

<input type="hidden" name="back" value="{{ request()->get('back') }}"/>

앞서 전달한 url을 login 폼 안에 hidden input으로 담아둡니다. 라라벨에서 일반적으로 로그인 폼으로 사용하는 resources/views/auth/login.blade.php 파일에서 form 태그 안에 넣어주면 됩니다.

LoginController에서 이동

protected function authenticated(Request $request, $user)
{
    if ($url = $request->input('back')) {
        return redirect($url);
    }
}

app/Http/Controllers/Auth/LoginController.php에서 authenticated() 메소드를 구현해줍니다. 이 메소드는 로그인을 하면 호출됩니다. 코드의 내용은 back 값이 있으면 해당 값의 url로 redirect 하는 것입니다.

마무리

로그인 후에 로그인이 요구했던 페이지로 자동으로 이동하는 방법을 알아봤습니다. Laravel은 명시적으로 로그인 페이지로 이동하는 경우 원래 페이지로 돌아가는 방법을 제공하지 않습니다. 이 기능을 제공하기 위해 로그인 페이지로 이동하는 링크에 redirect 하고싶은 url을 넣는 방식으로 구현을 했습니다.