Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OAuth 회원가입 구현 #903

Open
Tracked by #794
zangsu opened this issue Nov 9, 2024 · 3 comments
Open
Tracked by #794

OAuth 회원가입 구현 #903

zangsu opened this issue Nov 9, 2024 · 3 comments
Assignees
Labels
BE 백엔드 feature 기능 추가

Comments

@zangsu
Copy link
Contributor

zangsu commented Nov 9, 2024

gitHub OAuth로 회원가입을 진행합니다.

@zangsu zangsu added feature 기능 추가 BE 백엔드 labels Nov 9, 2024
@zangsu zangsu added this to the 7차 스프린트 💭 milestone Nov 9, 2024
@zangsu zangsu self-assigned this Nov 9, 2024
@zangsu
Copy link
Contributor Author

zangsu commented Jan 6, 2025

회원가입을 구현할 때 고려해야 하는 것은 다음과 같습니다.

  • 회원 DB 에 어떤 값을 저장할 지
    • 새로운 GithubMember 회원 DB 에서 회원 id와 함께 clientId를 저장합니다.
  • OAuth 제공자와 어떤 라이브러리로 통신할지
  • timeout 값은 어떤 값이 적절할지

고려하지 않은 것은 다음과 같습니다.

  • 로그인 유지를 위해 Access Token, Refresh Token 을 어떻게 사용할지
    • 해당 내용은 다음 작업인 "OAuth 로그인" 단계에서 고려 대상입니다.

@zangsu
Copy link
Contributor Author

zangsu commented Jan 8, 2025

DB에 저장할 OAuth 계정 식별값에 대해

OAuth 로 받아올 수 있는 회원 정보 응답 형식은 다음과 같습니다.

{
  "login": "octocat",
  "id": 1,
  "node_id": "MDQ6VXNlcjE=",
  "avatar_url": "https://github.com/images/error/octocat_happy.gif",
  "gravatar_id": "",
  "url": "https://api.github.com/users/octocat",
  "html_url": "https://github.com/octocat",
  "followers_url": "https://api.github.com/users/octocat/followers",
  "following_url": "https://api.github.com/users/octocat/following{/other_user}",
  "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
  "organizations_url": "https://api.github.com/users/octocat/orgs",
  "repos_url": "https://api.github.com/users/octocat/repos",
  "events_url": "https://api.github.com/users/octocat/events{/privacy}",
  "received_events_url": "https://api.github.com/users/octocat/received_events",
  "type": "User",
  "site_admin": false,
  "name": "monalisa octocat",
  "company": "GitHub",
  "blog": "https://github.com/blog",
  "location": "San Francisco",
  "email": "[email protected]",
  "hireable": false,
  "bio": "There once was...",
  "twitter_username": "monatheoctocat",
  "public_repos": 2,
  "public_gists": 1,
  "followers": 20,
  "following": 0,
  "created_at": "2008-01-14T04:33:35Z",
  "updated_at": "2008-01-14T04:33:35Z"
}

[GitHub Docs] / 사용자에 대한 REST API 엔드포인트 - Get the authenticated user

아쉽게도, 응답 필드에 대한 설명은 공식문서에서 찾을 수 없었습니다. adot 을 이용한 GitHub의 답변을 참고해 주요 필드에 대한 설명을 남겨둡니다.

  • login: 사용자의 로그인 아이디로, 변경될 수 있는 값입니다.
  • id: OAuth 제공자에서 제공해 주는 회원 식별자로, 변경되지 않으며 사용자마다 고유하게 가지는 값입니다.
  • node_id: GitHub 내부에서 사용하는 사용자 식별값입니다. Base64로 인코딩 되어 있습니다.

node_id 역시 DB의 식별자로 사용할 수 있으나, Base64로 인코딩되어 있기에 id의 사용이 더 편하다고 권장하고 있습니다.

@zangsu
Copy link
Contributor Author

zangsu commented Jan 10, 2025

회원가입 플로우

  1. 소셜 계정으로 회원가입을 한다.
  2. 코드잽에서 사용할 닉네임을 추가로 입력한다.
  3. 회원가입을 완료한다.

실제 요청 플로우

  1. 만두(코드잽 사용자)가 소셜 계정으로 회원가입 버튼을 누른다.
  2. 깃허브에서 로그인 창을 내려주고, 만두는 깃허브 로그인을 한다. (이 때 코드잽의 client_id 값이 필요하다.)
  3. 깃허브 로그인이 완료되면 깃허브는 authorization code 를 callback url로 전달한다.
  4. 프론트엔드에서 백엔드로 authorization code를 보내며 회원 중복 검증을 한다.
    4-1. 회원이 이미 존재한다면 로그인을 시킨다 / 오류를 반환한다.
  5. 회원이 존재하지 않는다면 닉네임을 추가로 입력 받는다.
  6. 백엔드로 authorization code 와 닉네임을 함께 전달한다.
  7. 회원가입 완료.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 feature 기능 추가
Projects
Status: Todo
Development

No branches or pull requests

1 participant