Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 한글
- Apple
- MacOS
- appstore
- 웹뷰
- Archive
- UIButton
- Session
- mac
- stack
- error
- rxswift
- window
- Firebase
- Python
- iOS16
- view
- darkmode
- 개발자
- Git
- Swift
- Realm
- Code
- Notification
- Xcode
- github
- SwiftUI
- FLUTTER
- JPA
- IOS
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
JPA, Swift ) Google 로그인 클라-서버 2중 인증 - EEYatHo iOS 본문
반응형
카카오 로그인 iOS 서버 2중 인증에 이어서 구글이다.
[ 카카오 로그인 iOS 서버 2중 인증 글 바로가기 ]
[ 2. 구글 ]
구글은 카카오와 비슷하다.
오픈 API를 이용하여 로그인 할 때, delegate로 user를 받아오는데,
user.authentication.idToken 을 이용하면 된다.
/// 구글 로그인 버튼 클릭 -> Delegate로 이어짐
@objc func tabGoogleLogin() {
GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance().signIn()
}
// 구글 로그인 Delegate
extension LoginViewController: GIDSignInDelegate {
// 구글 ( 로그인 했을 때 실행되는 부분 )
// user.xxx로 유저 정보 접근가능
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
// 구글 로그인 에러
if let error = error { print(error); return }
// 토큰, 이름 가져오기
guard let accessToken = user.authentication.idToken, let name = user.profile.name else {
print("Error : User Data Not Found"); return }
// 로그인 리퀘스트 생성
let signInRequest = SignInRequest(name: name, accessToken: accessToken, socialType: .google, uuid: "string")
// 로그인 리퀘스트 발싸
NetworkManager.singIn(request: signInRequest) { [weak self] result in
self?.signInResultProcessor(request: signInRequest, result: result)
}
}
// 구글 ( 로그아웃 햇을 때 실행되는 부분 )
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
// 유저가 앱에서 연결을 해제할때 수행되는 함수
print("구글 로그아웃")
}
}
iOS 측에서 user.authentication.idToken 을 서버에 보내는 코드다.
( 카카오와 동일한 이유로 name, uuid는 필요없다.
name은 이눔의 애플 때문에.. 아 아니 애플 만세! )
이를 수신한 서버는 이렇게 처리한다.
else if (socialType.equals("google")) {
// 구글 accessToken -> 구글 토큰 유효성 확인 및 프로필 정보 얻기
// URI 준비
URI url = URI.create("https://oauth2.googleapis.com/tokeninfo?id_token=" + accessToken);
// Http Request 발싸
RestTemplate restTemplate = new RestTemplate();
ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, String.class);
// Json 파싱
JsonUtil jsonUtil = new JsonUtil();
GoogleDTO googleDTO = jsonUtil.convert(response.getBody().toString(), GoogleDTO.class);
return SocialDTO.builder().name(googleDTO.getName()).email(googleDTO.getEmail()).build();
} else if (...) {...}
카카오 보다 간단하다.
https://oauth2.googleapis.com/tokeninfo 에다가,
id_token 파라미터에 iOS에서 넘겨받은 토큰을 넣어서 보내면,
유저정보를 다시 얻으면서 유효성을 검증할 수 있다.
카카오와 마찬가지로 이때 얻은 유저정보를 가지고, 우리 서비스의 회원을 만든다.
다음은 대망의 애플이다.
'iOS, Swift > Feature' 카테고리의 다른 글
Swift ) xlsx 이미지까지 자유롭게 - EEYatHo iOS (0) | 2022.02.21 |
---|---|
Swift) .CSV 파일 만들기 - EEYatHo iOS (0) | 2022.02.02 |
Swift ) 디바이스 여유공간 구하기 - EEYatHo iOS (3) | 2021.07.21 |
JPA, Swift ) Apple 로그인 클라-서버 2중 인증 - EEYatHo iOS (1) | 2021.02.27 |
JPA, Swift ) Kakao 로그인 클라-서버 2중 인증 - EEYatHo iOS (0) | 2021.02.27 |
Comments