로그인 - 이전 페이지로 돌아가기

고현수·2021년 8월 10일
0

개발일기

목록 보기
1/14
post-thumbnail

로그인이 필요해야만 작동하는 get 또는 post

미들 웨어를 사용하면 사용자가 로그인이 되어있어야만 사용 가능하도록 설정할 수 있다. 이건 Session을 사용해서 구현했다.

homeRouter.router('/').all(onlyPrivate).get('getPostSomething).post(postSomething)

all은 express에서 제공하는 함수이다. 미들웨어를 적용하는 방법중에 하나이며 all로 선언하면 get과 post에 모두 middleware를 적용할 수 있다.

onlyPrivate라는 함수는 middleware에서 가져올 수 있다. onlyPrivate함수는 단순하게 user가 로그인 되어있는지 아닌지를 판별하는 함수인데 그 로그인을 할 때 session에 정보를 true or false로 저장하게 하도록 하고 if함수로 user가 접속되어있는지 아닌지를 판별하게 한다.

여기까지는 노마드코더에서 배운 내용이다.

UX를 생각해보면 로그인 후에 다시 이전 페이지로 돌아가면 사용자가 편리할 것이다.

google 검색어 : nodejs path

구글에서 nodejs path값을 얻는 방법을 검색했다. 이것 저것 뒤지다가 req.path에서 값을 얻을 수 있다는 것을 알게 되었다. req.path를 console.log해보면 url을 얻을 수 있다.

그래서 login controller에 req.session.preUrl = req.path를 사용해서 저장한 값을 사용하게 끔 했다. 하지만 의도대로 작동하지 않았다.

오류 1. 가장 끝에 url만 가져온다.

router 주소가 '/qt/weekly-post'를 전부 가져와야하는데 '/weekly-post'만 가져와서 get을 실패했다는 메시지를 얻게 되었다.

req를 console.log해서 '/qt/weekly-post'를 검색했다. 그랬더니 req.originalUrl에 값이 적용된다는 것을 알 수 있었다. 그래서 코드를 다음과 같이 고쳤다.

export const preUrl = (req,res,next)=>{
	if(req.session.loggedIn){
		next();
	}else{
    	req.session.preUrl = req.orginalUrl;
        res.redirect('/login');
	}
 }

이렇게 했더니 로그인이 필요하면 로그인으로 리다이렉팅 해서 로그인이 성공한 다음에 postLogin의 return값을 req.session.preUrl로 보냈다.

오류 2. 뷰에서 loggedIn을 확인해서 로그인을 해야한다고 알려주는 경우

이 경우는 read detail부분에 일일이 붙여줘서 해결했다.

qtRouter.router('/read/:id/`).all(preUrl).get(qtDetail)

이런식으로 붙여서 그냥 사용자가 게시물을 읽으려고 클릭하는 순간 session에 현재 주소를 저장했다. 미들웨어를 지나지 않으면 req.session.preUrl의 저장값은 변하지 않기 때문에 login한 후에 바로 내가 읽고 있던 게시물로 돌아간다.

오류 3. 그냥 로그인을 누르면 get에 실패한다.

이 경우에는 session값이 저장되어있지 않기 때문이다. 그래서 만약에 req.session.preUrl이 undefined 일 때는 메인 페이지로 리다이렉트 할 수 있게 코드를 만들었다.

일단 지금까지는 잘 작동한다.

그런데 글을 쓰면서 생각해보니까 회원가입이 되어있지 않은 사람이라면 어떻게 해야하지? 일단 홈페이지의 회원가입 로직 자체가 가입한 다음에 자동으로 로그인되도록 만들지 않아서 어떻게 되는지 한번 테스트를 해봐야겠다. 아마 회원가입을 하고 나서 로그인을 한다고 해도 미들웨어를 통과되지 않기 때문에 바로 보던 페이지로 돌아갈 것 같긴 한데...

profile
2021 - 프론트 앤드 개발자가 되고싶다.

0개의 댓글