-
Notifications
You must be signed in to change notification settings - Fork 1
Github Authentication
Park Jong Ho edited this page Jul 14, 2022
·
3 revisions
- 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)
}
}