스프링부트 OAuth2 소셜로그인 설정 - (2)
📌 안드로이드 OAuth2 소셜로그인
👉 개요
1번째 글에서 하려고 했던 것은 소셜로그인 로직을 모두 SpringBoot에서 코딩하는 것이었다.
- 안드로이드에서 사용자가 로그인 아이디와 비밀번호를 보내줌
- 백엔드에서 이 값을 사용해 소셜로그인을 진행
- 토큰 발행
- 안드로이드에서 api를 날릴 때 토큰을 함께 사용
이렇게 사용하려고 했었는데, 만들면서 찾아보고 코딩을 하다보니 변경하게 되었다.
- 안드로이드에서 소셜로그인 진행 후 Access Token 발행
- Access Token을 서버로 보내고, JWT 발행
- Jwt를 Shared Preference에 저장
- API를 호출할 때 Jwt를 헤더에 넣어 호출
👉 기능
1
2
3
4
1. 카카오 로그인
2. 네이버 로그인
3. 소셜로그인이 아닌 이메일로 가입
4. 로그인하지 않고 시작
👉 안드로이드에서 소셜로그인 구현
Activity에서 두 소셜로그인의 로직을 넣기엔 코드가 너무 길어져 두 LoginManager 클래스를 따로 만들었다. 실제 Activity는 실제 로그인을 하는 로직한 넣어 만들었다.
카카오 로그인
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
private void performKakaoLogin() {
kakaoLoginManager.performLogin(this, new KakaoLoginManager.KakaoLoginCallback() {
@Override
public void onSuccess(OAuthToken token) {
Log.i(TAG, "카카오 로그인 성공: " + token.getAccessToken());
kakaoLoginManager.kakaoSocialLogin(token.getAccessToken(), new KakaoLoginManager.SocialLoginCallback() {
@Override
public void onSuccess(String message) {
Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
// TODO: 로그인 후 채팅방 화면으로 이동
Intent intent = new Intent(LoginActivity.this, ChatRoomActivity.class);
startActivity(intent);
finish(); // 현재 LoginActivity를 종료 (선택사항)
}
@Override
public void onFailure(String error) {
Toast.makeText(LoginActivity.this, error, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onFailure(Throwable error) {
Log.e(TAG, "카카오 로그인 실패", error);
Toast.makeText(LoginActivity.this, "카카오 로그인 실패", Toast.LENGTH_SHORT).show();
}
});
}
네이버 로그인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private final ActivityResultLauncher<Intent> naverLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
NaverLoginManager.handleLoginResult(result.getResultCode(), new NaverLoginManager.NaverLoginCallback() {
@Override
public void onSuccess(String accessToken) {
naverLoginManager.naverSocialLogin(accessToken, LoginActivity.this);
Log.i(TAG, "네이버 로그인 성공: " + accessToken);
// TODO: 추가 작업 수행
Intent intent = new Intent(LoginActivity.this, ChatRoomActivity.class);
startActivity(intent);
finish(); // 현재 LoginActivity를 종료
}
@Override
public void onFailure(String errorCode, String errorDescription) {
Log.e(TAG, "네이버 로그인 실패: " + errorCode + " - " + errorDescription);
}
});
}
);
이메일로 로그인(소셜로그인 X) -> 새로운 엑티비티로 이동
1
2
3
4
5
private void performEmailLogin() {
// 이메일 로그인 로직 구현
Intent intent = new Intent(this, EmailLoginActivity.class);
startActivity(intent);
}
This post is licensed under CC BY 4.0 by the author.