같은 사용자가 여러 로그인 방식으로 로그인했을 때 같은 사용자로 처리해야 할까?

‍bng4535·2023년 3월 24일
0

문제 상황

https://velog.io/@bng4535/Outh2%EA%B8%B0%EB%B0%98-%EC%86%8C%EC%85%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84-%EA%B3%BC%EC%A0%95
위 포스트에서 OAuth2 로그인과 같은 사용자를 확인할 때 가입된 사용자들의 email주소를 확인하여 구현하였다. 하지만 이렇게 구현하면 문제가 발생한다.

문제점

  • 기존에 로그인 폼으로 가입하지 않은 사용자의 경우 DB에서 email을 조회할 수 없다.
  • 즉 구글로 처음 로그인을 한 사용자는 SiteUser객체 정보가 존재하지 않으므로 게시판 기능을 사용하려하면 에러가 발생한다.
  • 또한 조회수 같은 기능을 구현할 때 이메일이 같은 여러 계정이 있다면, 서로 다른 세션을 공유해야 하는데 구현이 어렵다

해결방안

  • 나는 보통 여러 로그인 방식으로 로그인 했을 때 어떤 값을 기준으로 동일한 사람인지 구분하여 같은 계정으로 사용되게 하는 줄 알았다. 그런데 다른 커뮤니티 사이트를 돌아다니면서 확인해보니까 별도의 사용자로 취급하는 것이 일반적이었다. 그래서 기존 코드를 수정해서 로그인 방식이 다르면 다른 사용자로 인식하게 하였다.
  • 서로 다른 방식으로 로그인했을 때 같은 유저로 취급하기 위해서는 연동 기능을 구현하면 된다.
  • 이렇게 하면 여러 방식으로 로그인하더라도 복잡하게 예외처리를 할 필요가 없다.

결과

https://github.com/hanbonghun/spring-QA-board/commit/a1ddb8f31c82959d67fba7f3024ec0d210364b71

후기

  • 기능 자체가 단순해서 여러 케이스를 고려하지 않고 코드를 작성하면 이와 같은 문제가 발생한다.
  • 여러 상황을 고려하고 예외처리해서 안정적으로 어플리케이션이 작동하도록 하자
profile
공부 기록

0개의 댓글