2020/07/04 - GitHub OAuth 구현하기 (1) 에서 이어집니다.
GitHub OAuth의 인증을 진행하기 위해, 3가지 파일을 만들었습니다.
- main.go : 앱의 라우팅 및 OAuth 인증을 진행하기 위한 코드
- login.html : "GitHub으로 로그인하기" 버튼을 보여주며, 인증 되지 않은 사용자가 처음 접하는 화면입니다.
- main.html : GitHub으로부터 인증 받은 이후 처음 보여질 화면입니다.
main.go에서 정의한 라우팅은
http.HandleFunc("/", MainHandler)
http.HandleFunc("/auth", AuthHandler)
http.HandleFunc("/auth/callback", CallbackHandler)
log.Fatal(http.ListenAndServe(":8000", nil))
MainHandler는 사용자의 로그인 여부를 체크하며, 로그인 되지 않았을 경우, /auth화면으로 리다이렉트합니다.
AuthHandler는 GitHub으로 로그인하기 화면을 보여주며, GitHub OAuth인증을 위한 URL을 생성합니다.
CallbackHandler는 GitHub으로 부터 인증 토큰을 받아, 세션을 생성해서 로그인하는 기능을 합니다.
아직은 겨우 기능만 구현된 상태이기에, 코드 전부를 공개할 수는 없지만, 구현된 어플리케이션은 다음과 같이 동작합니다.
0. 아직 계정에 my-first-oauth-app은 등록되지 않은 것을 볼 수 있습니다.
1. 이제 구현한 앱을 실행하고 "sign in with GitHub"을 통해 OAuth 인증을 시도합니다.
2. "sign in with GitHub"을 클릭하면, 다음과 같은 GitHub 인증 화면이 보이게 됩니다.
제가 만든 my-first-oauth-app임을 확인할 수 있고, 리파지토리와 사용자 데이터에 접근할 수 있는 권한을 요청한다는 것을 알 수 있습니다. "Authorize" 버튼을 클릭합니다.
3. 인증이 처리되고 리다이렉트 된다는 메시지가 잠시동안 나오고, 잠시 후 메인 화면으로 이동하게 됩니다.
4. 이제 로그인 된 상태의 main 화면이 보입니다.
OAuth 인증과정을 잘 이해하고 있다면, 구현하는 것은 그리 어려운 과정은 아니었지만, 구현에 급급한 코드를 공개하기에는 코드를 설명하기도, 읽고 이해하기도 어려운 부분이 있었습니다. 또 이 코드를 실제 적용하기에도 무리가 있어 보여, 코드 공개는 조금 더 다듬은 후에 다음 글에서 공개하도록 하겠습니다.
아 그리고, GitHub으로 OAuth 인증을 했으니 계정에는 지금 만든 앱이 등록된 것을 확인할 수 있습니다.