보라코딩
jwt를 이용한 회원가입 (리액트 + JPA) 본문
솔직히 어렵다........
UserEntity
package com.boralog.blog.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import com.boralog.blog.dto.SignUpDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity(name = "User")
@Table(name = "User")
public class UserEntity {
@Id
private String userEmail;
private String userPassword;
private String userNickname;
private String userPhoneNumber;
private String userAddress;
private String userProfile;
public UserEntity(SignUpDto dto) {
this.userEmail = dto.getUserEmail();
this.userPassword = dto.getUserPassword();
this.userNickname = dto.getUserNickname();
this.userPhoneNumber = dto.getUserPhoneNumber();
this.userAddress = dto.getUserAddress() + " " + dto.getUserAddressDetail();
}
}
UserRepository
package com.boralog.blog.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.boralog.blog.domain.UserEntity;
@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
public boolean existsByUserEmailAndUserPassword(String userEmail, String userPassword);
}
AuthController
package com.boralog.blog.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.boralog.blog.dto.ResponseDto;
import com.boralog.blog.dto.SignInDto;
import com.boralog.blog.dto.SignInResponseDto;
import com.boralog.blog.dto.SignUpDto;
import com.boralog.blog.service.AuthService;
//@CrossOrigin(originPatterns = "http://localhost:3000")
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
AuthService authService;
@PostMapping("/signUp")
public ResponseDto<?> signUp(@RequestBody SignUpDto requestBody) {
ResponseDto<?> result = authService.signUp(requestBody);
return result;
}
@PostMapping("/signIn")
public ResponseDto<SignInResponseDto> signIn(@RequestBody SignInDto requestBody) {
System.out.println(requestBody);
ResponseDto<SignInResponseDto> result = authService.signIn(requestBody);
return result;
}
}
AuthService
package com.boralog.blog.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.boralog.blog.domain.UserEntity;
import com.boralog.blog.dto.ResponseDto;
import com.boralog.blog.dto.SignInDto;
import com.boralog.blog.dto.SignInResponseDto;
import com.boralog.blog.dto.SignUpDto;
import com.boralog.blog.repository.UserRepository;
import com.boralog.blog.security.TokenProvider;
@Service
public class AuthService {
@Autowired
UserRepository userRepository;
@Autowired
TokenProvider tokenProvider;
public ResponseDto<?> signUp(SignUpDto dto) {
String userEmail = dto.getUserEmail();
String userPassword = dto.getUserPassword();
String userPasswordCheck = dto.getUserPasswordCheck();
// email 중복확인
try {
if (userRepository.existsById(userEmail)) {
return ResponseDto.setFailed("Existed Email!");
}
} catch (Exception e) {
return ResponseDto.setFailed("DB error!");
}
// 비밀번호 다르면 failed response 반환
if (!userPassword.equals(userPasswordCheck)) {
return ResponseDto.setFailed("Password does not matched!");
}
// UserEntity 생성
System.out.println("UserEntity 생성!");
UserEntity userEntity = new UserEntity(dto);
// UserRepository 이용해서 DB에 Entity 저장
try {
userRepository.save(userEntity);
} catch (Exception e) {
return ResponseDto.setFailed("DB Error!");
}
// 성공시
System.out.println("성공시 return~");
return ResponseDto.setSuccess("Sign Up Success!", null);
}
public ResponseDto<SignInResponseDto> signIn(SignInDto dto) {
String userEmail = dto.getUserEmail();
String userPassword = dto.getUserPassword();
try {
boolean existed = userRepository.existsByUserEmailAndUserPassword(userEmail, userPassword);
if (!existed)
return ResponseDto.setFailed("Sign In Information does not match!");
} catch (Exception error) {
return ResponseDto.setFailed("DB error");
}
UserEntity userEntity = null;
try {
userEntity = userRepository.findById(userEmail).get();
} catch (Exception error) {
return ResponseDto.setFailed("DB error");
}
userEntity.setUserPassword("");
String token = tokenProvider.create(userEmail);
int exprTime = 3600000;
SignInResponseDto signInResponseDto = new SignInResponseDto(token, exprTime, userEntity);
return ResponseDto.setSuccess("Sign in Success", signInResponseDto);
}
}
dto
ResponseDto
package com.boralog.blog.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor(staticName = "set")
public class ResponseDto<D> {
private boolean result;
private String message;
private D data;
public static <D> ResponseDto<D> setSuccess(String message, D date) {
return ResponseDto.set(true, message, date);
}
public static <D> ResponseDto<D> setFailed(String message) {
return ResponseDto.set(false, message, null);
}
}
SignUpDto
package com.boralog.blog.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignUpDto {
private String userEmail;
private String userPassword;
private String userPasswordCheck;
private String userNickname;
private String userPhoneNumber;
private String userAddress;
private String userAddressDetail;
}
SignInDto
package com.boralog.blog.dto;
import javax.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignInDto {
@NotBlank
private String userEmail;
@NotBlank
private String userPassword;
// private UserEntity user;
}
SignInResponseDto
package com.boralog.blog.dto;
import com.boralog.blog.domain.UserEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignInResponseDto {
private String token;
private int exprTime;
private UserEntity user;
}
App.js
SignUp
SignIn
'코딩 > Spring' 카테고리의 다른 글
SpringBoot + React 채팅 구현 (웹소켓, stomp, redis) (0) | 2023.11.20 |
---|---|
JWT(JSON Web Token), Filter, Config (0) | 2023.09.30 |
Spring Boot JPA CRUD 정리 (0) | 2023.08.08 |
Spring Boot 와 React.js 연동하기! (0) | 2023.08.05 |
스프링부트 테스트 (0) | 2023.07.25 |