Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/main/java/com/ieum/ict/ieum/IeumApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,18 @@ public static void main(String[] args) {
CommandLineRunner seedAdminUser(UserRepository userRepository, PasswordEncoder passwordEncoder) {
return args -> userRepository.findByEmail("admin@ieum.com").ifPresentOrElse(
user -> {
if (user.getLoginId() == null) {
user.updateLoginId("admin");
}
if (user.getRole() != UserRole.ADMIN) {
user.updateRole(UserRole.ADMIN);
userRepository.save(user);
}
userRepository.save(user);
},
() -> {
User admin = new User(
"admin@ieum.com",
"admin",
passwordEncoder.encode("admin1234!"),
"ieum_admin"
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.ieum.ict.ieum.auth.domain.User;
import com.ieum.ict.ieum.auth.domain.UserRole;

public record AdminUserResponse(Long id, String email, String name, UserRole role) {
public static AdminUserResponse from(User user) { return new AdminUserResponse(user.getId(), user.getEmail(), user.getName(), user.getRole()); }
public record AdminUserResponse(Long id, String email, String loginId, String name, UserRole role) {
public static AdminUserResponse from(User user) {
return new AdminUserResponse(user.getId(), user.getEmail(), user.getLoginId(), user.getName(), user.getRole());
}
}
6 changes: 4 additions & 2 deletions src/main/java/com/ieum/ict/ieum/auth/api/AuthRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@

public final class AuthRequest {
private AuthRequest() {}
public record Signup(@NotBlank @Email String email, @NotBlank @Size(min = 8) String password,
public record Signup(@NotBlank @Email String email,
@NotBlank @Size(min = 4, max = 30) String loginId,
@NotBlank @Size(min = 8) String password,
@NotBlank String name) {}
public record Login(@NotBlank @Email String email, @NotBlank String password) {}
public record Login(@NotBlank String loginId, @NotBlank String password) {}
public record Refresh(@NotBlank String refreshToken) {}
public record Logout(@NotBlank String refreshToken) {}
}
8 changes: 6 additions & 2 deletions src/main/java/com/ieum/ict/ieum/auth/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public class User {
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Column(unique = true)
private String loginId;
@Column(nullable = false)
private String password;
@Column(nullable = false)
Expand All @@ -25,19 +27,21 @@ public class User {
@Column(nullable = false)
private UserRole role = UserRole.USER;

public User(String email, String password, String name) {
public User(String email, String loginId, String password, String name) {
this.email = email;
this.loginId = loginId;
this.password = password;
this.name = name;
}

public User(String email, String password, String name, AuthProvider authProvider) {
this(email, password, name);
this(email, null, password, name);
this.authProvider = authProvider;
}

public void updateRefreshToken(String refreshToken) { this.refreshToken = refreshToken; }
public void clearRefreshToken() { this.refreshToken = null; }
public void updateRole(UserRole role) { this.role = role; }
public void updateLoginId(String loginId) { this.loginId = loginId; }
public boolean isGoogleLogin() { return authProvider == AuthProvider.GOOGLE; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@

public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmail(String email);
boolean existsByLoginId(String loginId);
Optional<User> findByEmail(String email);
Optional<User> findByLoginId(String loginId);
}
18 changes: 13 additions & 5 deletions src/main/java/com/ieum/ict/ieum/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,22 @@ public void signup(AuthRequest.Signup request) {
if (userRepository.existsByEmail(request.email())) {
throw new ResponseStatusException(HttpStatus.CONFLICT, "이미 가입된 이메일입니다.");
}
userRepository.save(new User(request.email(), passwordEncoder.encode(request.password()), request.name()));
if (userRepository.existsByLoginId(request.loginId())) {
throw new ResponseStatusException(HttpStatus.CONFLICT, "이미 사용 중인 아이디입니다.");
}
userRepository.save(new User(
request.email(),
request.loginId(),
passwordEncoder.encode(request.password()),
request.name()
));
}

public AuthResponse login(AuthRequest.Login request) {
User user = userRepository.findByEmail(request.email())
.orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "이메일 또는 비밀번호가 올바르지 않습니다."));
User user = userRepository.findByLoginId(request.loginId())
.orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다."));
if (!passwordEncoder.matches(request.password(), user.getPassword())) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "이메일 또는 비밀번호가 올바르지 않습니다.");
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다.");
}
String accessToken = jwtTokenProvider.create(user.getEmail(), "access", user.getRole().name(), 3600000);
String refreshToken = jwtTokenProvider.create(user.getEmail(), "refresh", user.getRole().name(), 1209600000);
Expand Down Expand Up @@ -75,7 +83,7 @@ public AuthResponse refresh(AuthRequest.Refresh request) {
}

public AuthResponse adminLogin(AuthRequest.Login request) {
User user = userRepository.findByEmail(request.email())
User user = userRepository.findByLoginId(request.loginId())
.filter(candidate -> candidate.getRole() == UserRole.ADMIN)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "관리자 계정 정보가 올바르지 않습니다."));
if (!passwordEncoder.matches(request.password(), user.getPassword())) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/ieum/ict/ieum/user/api/UserResponse.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package com.ieum.ict.ieum.user.api;

public record UserResponse(Long id, String email, String name) {}
public record UserResponse(Long id, String email, String loginId, String name) {}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ public class UserService {
public UserResponse getMyInfo(String email) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "사용자를 찾을 수 없습니다."));
return new UserResponse(user.getId(), user.getEmail(), user.getName());
return new UserResponse(user.getId(), user.getEmail(), user.getLoginId(), user.getName());
}
}
Loading