로그인 하지않은 사용자가 접근하면 안되는 페이지에 접근했을 때 로그인 페이지로 이동 시켰다가 로그인 또는 회원가입을 한 후에 처음 접근을 시도했던 페이지로 다시 리다이렉트 시켜야하는 상황
UI/UX 혼란 - 잘못된 리다이렉트 로직으로 인해 사용자가 로그인 또는 회원가입 페이지로 계속 이동하여 루프가 발생할 수 있다.
위 두가지 방법으로 동작하도록 설계하여 혼란을 최대한 방지할 수 있도록 했다.
if (from === 'button') {
history.goBack();
} else {
history.replace(`${from.pathname}`);
}
리다이렉트 경로 관리 - 사용자가 로그인 또는 회원가입 후 원래 접근하려던 페이지로 리다이렉트 시키기 위해 접근한 페이지 경로를 저장해야한다.
react-router-dom의 기능 중 다음으로 이동할 페이지에 상태값을 전달할 수 있는 state props을 이용하여 로그인 전 어느 페이지에서 왔는지를 전달하여 해결한다.
PrivateRoute 컴포넌트를 생성하여 react-router-dom의 Redirect, Route를 이용하여 Local Storage에 Refresh Token이 없다면 로그인 하지 않은 사용자, 있다면 로그인한 사용자로 판단하여 로그인을 한 사용자라면 원래 접근하려던 페이지로 가고 비로그인 사용자면 로그인 페이지로 리다이렉트 시키도록 했다.
로그인 여부를 판단하는 것이 단순히 Local Storage에 Refresh Token 존재 여부로만 판단한 것이 아쉽다. 또, 한 함수에 여러 기능을 하는 코드를 다 작성하지 않고 함수나 컴포넌트로 따로 분리해서 코드를 작성하고 싶다.