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 |
Tags
- JPA주의사항
- 복합키
- jpa에러
- 스프링 부트 공식 문서
- json
- Spring Spring boot 차이
- ERD 작성
- jpa회원가입
- 빈생성안됨
- REST API 규칙
- REST란
- Q 클래스
- 스프링부트오류
- git
- queryDSL
- uncheck Exception
- JoinColumn
- github
- jwt메서드
- json gson 차이
- 1차캐시
- spring서버
- Error creating bean with name
- 인텔리제이
- Unsatisfied dependency
- 스프링 부트 기능
- JPA
- @IdClass
- 최종 프로젝트
- Filter
Archives
- Today
- Total
Everyday Dev System
카카오 로그인 적용하기 본문
1. KakaoService 코드 수정
1) kakaoLogin() 메서드에 코드 수정
- JWT 토큰을 생성하고 반환하는 코드 추가
public String kakaoLogin(String code) throws JsonProcessingException {
// 1. "인가 코드"로 "액세스 토큰" 요청
String accessToken = getToken(code);
// 2. 토큰으로 카카오 API 호출 : "액세스 토큰"으로 "카카오 사용자 정보" 가져오기
KakaoUserInfoDto kakaoUserInfo = getKakaoUserInfo(accessToken);
// 3. 필요시에 회원가입
User kakaoUser = registerKakaoUserIfNeeded(kakaoUserInfo);
// 4. JWT 토큰 반환
String createToken = jwtUtil.createToken(kakaoUser.getUsername(),kakaoUser.getRole());
return createToken;
}
2) Kakao 회원가입 데이터 DB 에 저장
private User registerKakaoUserIfNeeded(KakaoUserInfoDto kakaoUserInfo) {
// DB 에 중복된 Kakao Id 가 있는지 확인
Long kakaoId = kakaoUserInfo.getId();
User kakaoUser = userRepository.findByKakaoId(kakaoId).orElse(null);
if (kakaoUser == null) {
// 카카오 사용자 email 동일한 email 가진 회원이 있는지 확인
String kakaoEmail = kakaoUserInfo.getEmail();
User sameEmailUser = userRepository.findByEmail(kakaoEmail).orElse(null);
if (sameEmailUser != null) {
kakaoUser = sameEmailUser;
// 기존 회원정보에 카카오 Id 추가
kakaoUser = kakaoUser.kakaoIdUpdate(kakaoId);
} else {
// 신규 회원가입
// password: random UUID
String password = UUID.randomUUID().toString();
String encodedPassword = passwordEncoder.encode(password);
// email: kakao email
String email = kakaoUserInfo.getEmail();
kakaoUser = new User(kakaoUserInfo.getNickname(), encodedPassword, email, UserRoleEnum.USER, kakaoId);
}
userRepository.save(kakaoUser);
}
return kakaoUser;
}
3) UserRepository.java에 코드 추가
Optional<User> findByKakaoId(Long kakaoId);
2. User 테이블에 kakaoId 칼럼 추가하기.
User.java 코드 수정
package com.sparta.myselectshop.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
private Long kakaoId;
public User(String username, String password, String email, UserRoleEnum role) {
this.username = username;
this.password = password;
this.email = email;
this.role = role;
}
public User(String username, String password, String email, UserRoleEnum role, Long kakaoId) {
this.username = username;
this.password = password;
this.email = email;
this.role = role;
this.kakaoId = kakaoId;
}
public User kakaoIdUpdate(long kakaoId){
this.kakaoId = kakaoId;
return this;
}
}
3. UserRepository 코드 추가
Optional<User> findByKakaoId(Long kakaoId);
'내배캠 주요 학습 > Spring 심화' 카테고리의 다른 글
myBlog 프로젝트 예외 처리, AOP (0) | 2023.07.13 |
---|---|
Controller 테스트 코드 작성법 (1) | 2023.07.11 |
카카오 서버에서 인증 코드 가져오기 및 토큰 생성 및 사용자 정보 가져오기 (0) | 2023.07.10 |
카카오 로그인 기초 설정 (0) | 2023.07.10 |