시대가 어느땐데 아직도 자동 로그인이 안됩니까
계정 하나당 기기 3개까진 자동로그인 되게 합시다.
로그인에 자동로그인을 기본값이 체크, 원할때 체크하지 않게 하기로.
(1) 서버측 request, 클라이언트 response 방식으로 HASH(token | nonce) 값 비교해서 자동 로그인 구현.
(2) state 보관과 관련된 구현이 안되어있으니 일단 API 요청은 자르고, 웹 요청만 수행하고 서버별 메인 페이지로 보내는 것으로
(3) 자동 로그인 상세 동작
[1] requireLogin의 Fallback 페이지를 auto_login.php?redirect=페이지&nonce=숫자로 설정
- 만약 auto_login_token 테이블에 해당 유저의 token의 valid_to를 확인해서 기간을 초과했다면 토큰 폐기 후 메인페이지로
[2] 토큰이 아직 유효하다면 auto_login_token 테이블에 해당 유저의 user_id, token, nonce 재설정. (nonce를 서버측에서 재설정하는 것에 유의)
[3] 클라이언트는 uri를 분석하여 token과 nonce를 재 조합하여 j_auto_login.php로 전송
[4] 서버는 테이블의 user_id, token, nonce가 모두 일치하는지 확인하고, 일치하면 로그인 성공처리, 실패하면 토큰 폐기
[5] 로그인 성공하면 클라이언트에서 location을 수정하여 redirect 페이지로 바로 이동
- 일단은 requireGameLogin은 redirect 후에 페이지 내부에서 처리함
(4) 일반 로그인 상세 동작
[1] 아이디/비밀번호로 로그인 (j_login.php)
[2] 로그인 성공 시 auto_login_token이 넉넉한지 확인하고, 초과했다면 가장 valid_to가 오래된 것부터 삭제
- 넉넉함의 기준은 3개 데스크탑, 폰, 태블릿(?)
[3] 새 토큰 발급, j_login.php의 응답값에 토큰을 추가
- valid_to는 로그인 기준 3개월 예상
[4] 토큰을 localStorage에 저장
(5) 예상되는 문제점
- 자동 로그인 토큰은 유효하지만 카카오톡 로그인 재인증이 필요한 경우
- 작성안은 API 자체로는 stateless하지 않아 세션 관리가 필요. 세션 없이 작동하려면 token을 OpenAPI 구현과 비슷하게 영구 토큰, 로그인 토큰의 2단계로 분리해야함.
댓글 달기