구글 클라우드 플랫폼(https://console.cloud.google.com)로 이동
[프로젝트 선택] 탭 클릭
[새 프로젝트] 클릭
[프록젝트 이름] 입력 후 [만들기] 클릭
방금 생성한 프로젝트인지 확인 후에 왼쪽 메뉴 탭에서 API 및 서비스 카테고리로 이동
[사용자 인증 정보] 클릭 -> [사용자 인증 정보 만들기] -> OAuth 클라이언트 ID클릭
클라이언트ID가 생성되지 전에 동의 화면 구성이 필요하므로 안내에 따라 [동의 화면 구성] 클릭
내부를 선택하든 외부를 선택하든 모두 프록젝트 관리자의 승인을 받은 계정만 테스트 할 수 있으므로 무엇을 선택하든 문제가 없습니다. 저는 외부 클릭 후 다음으로 넘어가겠습니다.
앱 이름, 사용자 지원 이메일 입력 후 [저장 후 계속] 클릭
[범위 추가 또는 삭제] 클릭 email, profile, openid 선택 후 [업테이트] 클릭 [저장 후 계속]
다음으로 넘어가면 테스트 사용장 이메일 주소를 입력하고 저장하시면 됩니다.
동의화면 설정이 끝났다면 다시 OAuth 클라이언트 ID 클릭하여,
위와 같이 입력해주세요.
src/main/resoures에 application-oauth.properties 생성
좀전에 생성한 클라이언트ID를 클릭하면 부여받은 클라이언트ID와 클라이언트 보안 비밀을 확인할 수 있습니다.
그것을 application-oauth.properties에 입력해주세요
spring.security.oauth2.client.registration.google.client-id=클라이언트ID
spring.security.oauth2.client.registration.google.client-secret=클아이언트 보안 비밀
spring.security.oauth2.client.registration.google.scope=profile,email
application.properties에 spring.profiles.include=oauth 을 추가로 작성해 주세요
domain패키지에 user패키지 생성 후 User 클래스 생성
작성
package com.momenting.book.springboot.domain.user;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@Column
private String picture;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private Role role;
@Builder
public User(String name, String email, String picture, Role role) {
this.name = name;
this.email = email;
this.picture = picture;
this.role = role;
}
public User update(String name, String picture) {
this.name = name;
this.picture = picture;
return this;
}
public String getRoleKey() {
return this.role.getKey();
}
}
- @Enumerated(EnumType.STRING)
JPA로 데이터베이스로 저장할 때 Enum 값을 어떤 형태로 저장할지 결정합니다.
기본적으로는 int로 된 숫자가 저장됩니다.
숫자로 저장되면 데이터베이스로 확인할 때 그 값이 무슨 코드를 의미하는지 알 수가 없습니다.
그래서 문자열로 저장될 수 있도록 선언 합니다.
user 패키지에 Role Enum클래스 생성
작성
package com.momenting.book.springboot.domain.user;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum Role {
GUEST("ROLE_GUEST", "방문자"),
USER("ROLE_USER", "일반 사용자");
private final String key;
private final String title;
}
user 패키지에 UserRepository 인터페이스 생성
작성
package com.momenting.book.springboot.domain.user;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email); // 소셜 로그인으로 반환되는 값중 email을 통해 이미 생성된 사용자인지 처음 가입하는 사용자인지 판단하기위한 메서드
}