codestates / codestates/Memory-It
[Dev Log] 유저의 로그인전후 상태에 따른 처리를 깔끔하게 해볼 수 없을까
- Dominant language
- JavaScript
- Stars
- 1
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
### 1 우선 클라이언트에서 서버로의 접근 권한을 토큰여부로 나눈다.
우리는 유저인증을 jwt토큰으로 처리하고 있는데 유저가 서버로 요청을 보낼때 토큰이 유효한지 확인하고 유효하다면 요청에따른 응답을 하고 토큰이 유효하지않다면 적절한 오류를 응답한다.
특히 나는 유저데이터 관련(로그인, 로그아웃, 회원가입 등) 요청 처리를 맡고있는데 한가지 의문점이 생겼다.
로그인 했을 때 유저 닉네임, 이메일 주소 등 클라이언트에서 보여줄 수 있는 정도의 유저정보는 어떻게 응답을 보내 어디에 저장하는게 좋을까?
뭐 딱히 어려운 생각은 아니다. 심지어 퍼스트 프로젝트때에 이미 처리해보기도 했다.(그땐 로컬 스토리지를 활요함)
그래서 정확하게 표현하자면 클라이언트단에서 유저정보유지에 **_다양한 엣지 케이스를 어떻게 처리할 수 있을까_** 정도 이다.
### 2 쓸데없는 것일지도 모르겠지만..
예를 들어
1. 만약 닉네임을 로컬스토리지에 저장하고 리액트가 로컬스토리지의 값을 읽어오게 해놓는다면 로컬스토리지값을 임의로 바꿨을 때 어떻게되지?
2. 실제로 DB상 유저정보가 바뀌는것은 당연히 아니지만 UI상으로는 로컬스토리지에 의존적이니 그냥 임의로 바꾼데이터가 지속되는걸까
3. 물론 로그아웃을 했다가 로그인을 한다거나 그냥 새로고침을 해서 해당 페이지의 요청을 새로보내 거기에 맞는 응답을 또 로컬 스토리지에 담기만하면야 아무문제없지 않을까
또는
1. 유저가 굳이 브라우저의 개발자도구를 열어서 토큰만 임의로 제거하고 요청을 보냈을 경우, 엑세스만 없애거나 리프레시만 없애거나 하는 경우 등등
2. 모든 요청에서 이러한 경우의 수를 다 생각해서 처리해야하는걸까? 이런짓을 할 유저는 없겠지만 실제로 가능한것이긴하니..
등등 쓸데없이 이것저것 생각해보고 실제 웹사이트에서 이것저것 실험을 해봤는데 그에 대한 처리가 잘 돼있었다.
이런것들을 복잡하게 하나하나 처리하지 않고 깔끔하게 처리해 볼 수 도 있지않을까 라는 생각이 들었다.
내가 워낙 단순하고 깔끔하게 생각하고 처리하는 것을 좋아하다보니 분명 괜찮은 방법이 있을거라는 생각도 자연스레들었다.
결국 내가 내린 결론은 로그인전후를 감지하는 미들웨어 하나를 만들어보자였다.
메커니즘은
1. 클라이언트에서 라우팅 될 수 있는 (해당메커니즘이 필요한)모든 페이지에서 기본적으로 GET을 보낸다. 가령 메인페이지, 개인정보수정, 기타 기능들이 있는 페이지 등등
2. 이때 각 페이지별로 보내오는 최초의 GET요청에서 토큰이 함께 왔는지, 해당토큰이 유효한지 검증한다.
3. 토큰이 있고 유효하다면 해당페이지에 머무를 수 있게하고(그럼 자연스레 유저가 다음 요청을 보내게될것이다)
4. 토큰이 없거나 유효하지 않다면 메인페이지로 보내버린다.
처음 이 기능만 하는 미들웨어를 하나 만들자라는 생각이났을때는 엄청 괜찮다라는 생각이들었는데 지금와서 보니 엄청 별거없는거같다.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.