작성
·
29
0
안녕하세요 강사님 혹시 oauth2 를 이용한 로그인을 한 다음에 사용자 프로필을 받는 것이 서비스 플로우인데 이럴경우
웹이 아닌 앱을 사용할경우 (로직은 다른 거 알고 있습니다.) (PCKE 방식 사용 예정입니다.)
oauth2 를 해서 사용자 db에 저장이 되고
이렇게 처음에 저장이 되고 그 다음에 프로필을 받으면 저 값이 수정이 되게 만들어 주는 게 맞을지 질문드립니다.
사용자엔티티에 Provider 나 socialId 로 값을 받습니다. (구글과 애플을 사용할 예정입니다.)
@Entity
@Table(name = "users")
@Getter
@NoArgsConstructor
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Enumerated(EnumType.STRING)
@Column(name = "SEX", nullable = false)
private Sex sex;
@Column(name = "age", nullable = false)
private Integer age;
@Column(name = "nationality", nullable = false)
private String nationality;
@Column(name = "introduction", length = 40, nullable = false)
private String introduction;
@Column(name = "visit_purpose", length = 40, nullable = false)
private String visitPurpose;
@Column(name = "languages", nullable = false)
private String languages;
@Column(name = "hobby", nullable = false)
private String hobby;
@Column(name = "created_at", nullable = false)
private Instant createdAt;
@Column(name = "updated_at", nullable = false)
private Instant updatedAt;
@Column(name = "Provider", nullable = false)
private String provider;
@Column(name = "social_id", nullable = false)
private String socialId;
@Column(name = "email", nullable = false)
private String email;
@Builder
public User(String name, Sex sex, Integer age, String nationality,
String introduction, String visitPurpose, String languages,
String hobby, String provider, String socialId, String email) {
this.name = name;
this.sex = sex;
this.age = age;
this.nationality = nationality;
this.introduction = introduction;
this.visitPurpose = visitPurpose;
this.languages = languages;
this.hobby = hobby;
this.provider = provider;
this.socialId = socialId;
this.email = email;
this.createdAt = Instant.now();
this.updatedAt = Instant.now();
}
public void updateProfile(UserUpdateDTO dto) {
if (dto.getName() != null && !dto.getName().trim().isEmpty()) {
this.name = dto.getName().trim();
}
if (dto.getSex() != null) {
this.sex = dto.getSex();
}
if (dto.getAge() != null) {
this.age = dto.getAge();
}
if (dto.getNationality() != null && !dto.getNationality().trim().isEmpty()) {
this.nationality = dto.getNationality().trim();
}
if (dto.getIntroduction() != null && !dto.getIntroduction().trim().isEmpty()) {
this.introduction = dto.getIntroduction().trim();
}
if (dto.getVisitPurpose() != null && !dto.getVisitPurpose().trim().isEmpty()) {
this.visitPurpose = dto.getVisitPurpose().trim();
}
if (dto.getLanguages() != null && !dto.getLanguages().trim().isEmpty()) {
this.languages = dto.getLanguages().trim();
}
if (dto.getHobby() != null && !dto.getHobby().trim().isEmpty()) {
this.hobby = dto.getHobby().trim();
}
this.updatedAt = Instant.now(); // 수정 시각 갱신
}
}
답변 2
0
안녕하세요~!
제가 질문을 정확히 이해했는지 모르겠습니다만, 먼저 비어있는 회원요소를 만든후에,
oauth2-client를 통해 구글로부터 받아온 정보를 가지고 추후 업데이트 하겠다는 말씀으로 이해하면 될까요?
그런데, 비어있는 회원요소를 db에 만들필요 없이 구글로부터 받아온정보를 가지고 바로 등록(create)작업을 하면 더 간편하지 않을까요?
제가 맥락을 정확히 이해했는지 확실히 몰라서, 맞는 답변일지 모르겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. KMC님.
질문해주신 내용에 대해서는 사용자 OAuth2 로그인 후 프로필을 업데이트하는 일반적인 플로우에 대한 설명으로 보입니다. 아래는 특정한 로직을 진행하는 과정에서 고려할 수 있는 몇 가지 사항과 접근법입니다:
초기 사용자 데이터 저장:
socialId
, provider
, 그리고 특수한 경우 email
등 최소한의 정보를 기반으로 사용자 데이터를 users
테이블에 저장할 수 있습니다. 이 단계에서는 사용자의 프로필이 불완전할 수 있습니다.프로필 정보 업데이트:
User
엔티티의 updateProfile()
메서드를 호출하여 필요한 정보를 업데이트하고, 이와 함께 updatedAt
필드를 갱신하여 최신 상태를 반영할 수 있습니다.UserUpdateDTO
객체를 통해 변경될 수 있는 프로필 필드를 관리하며, 업데이트 가능성을 평가하고 필요에 따라 값을 조정하게 됩니다.PCKE 및 앱 연동:
유사한 로직을 구현하는 방식이나 OAuth2와 관련된 더 많은 정보가 필요하시다면 아래의 유사 질문 URL을 확인할 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이게 서비스 플로우가 처음 방문한 경우 구글 oauth2로 로그인을 하면 db 에 유저 정보가 들어갑니다. 처음 방문 인경우 그 다음 국적 나이 성별 사용 가능언어 등등 를 사용자가 설정해야 하는 데 이럴 경우 처음 유저정보가 들어간 데이터베이스에서 (이 때는 유저정보에 구글에서 받아온 이메일 하고 소셜아이디만 들어갑니다.) 그다음 프로필 정보(소개글이나 기타 세팅을 사용자가 해줍니다
틴더? 비슷한느낌인 거 같습니다.) 를 유저에 정보(사진 과 같이 설정된 상태)에서 업데이트를 해 주는 게 맞나요?