Skip to content

Github Authentication

Park Jong Ho edited this page Jul 14, 2022 · 3 revisions

Github 를 활용한 Firebase Sign In

  • oAuth 방식을 이용
  • safari github 에 token 요청 후 redirect url 로 token 을 전송 (URL Scheme 을 사용한 Mac app 딥링킹) -> 해당 token 을 가지고 accessToken 을 요청하면 response 로 API 요청에 사용 가능한 accessToken 을 반환
  • accessToken 과 Firebase Auth GithubAuthProvider 로 회원가입 성공
// Authorization url 로 Safari 열기
guard let url = GithubAPI.authroize.url(URLString.GITHUB_AUTHENTICATE_BASE_URL) else {
            return
        }
        print(url)
        NSWorkspace.shared.open(url)
// Safari 에서 url 로 code 를 넘김
private func handleDeepLink(_ url: URL) {
        guard let code = url.absoluteString.split(separator: "=").last.map({ string in
            String(string)
        }) else {
            return
        }
// 해당 code 를 가지고 AccessToken 요청
        GithubAPI.requestAccessToken(code)
            .request(URLString.GITHUB_AUTHENTICATE_BASE_URL)
            .map(\.data)
            .map({ data in
                String(data: data, encoding: .utf8)
            })
            .sink(receiveCompletion: { completion in

            }, receiveValue: { result in
                guard let result = result else {
                    return
                }
                let value = result.components(separatedBy: "&").first
                let token = value?.components(separatedBy: "=").last
                print(token)
                guard let token = token else {
                    return
                }
                firebaseAuthenticate(token)
            })
            .store(in: &self.appDelegate.cancelBag)
    }

// accessToken 으로 Firebase 에 sign In 할 수 있다.
    private func firebaseAuthenticate(_ token: String) {
        let githubAuthProvider = GitHubAuthProvider.credential(withToken: token)
        Auth.auth().signIn(with: githubAuthProvider) {
            print($0)
            print($1)
        }
    }

Clone this wiki locally