1. 일정관리 앱 Develop Lv.3-4 회원가입과 로그인(인증)
- 유저에 비밀번호 필드 추가
- 설명
- Cookie/Session을 활용해 로그인 기능을 구현
- 조건
이메일과 비밀번호를 활용해 로그인 기능을 구현
2. github 주소
3. 코드
public class User extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@Column(unique = true)
private String email;
private String password;
...
@PostMapping("/signup")
public ResponseEntity<UserSignupResponse> signupUser(
@Valid @RequestBody UserSignupRequest request
){
return ResponseEntity.status(HttpStatus.CREATED).body(userService.save(request));
}
@PostMapping("/login")
public ResponseEntity<Void> login(
@Valid @RequestBody UserLoginRequest request, HttpSession session
){SessionUser sessionUser = userService.login(request);
session.setAttribute("loginUser", sessionUser);
return ResponseEntity.status(HttpStatus.OK).build();
}
@Transactional(readOnly = true)
public SessionUser login(@Valid UserLoginRequest request) {
User user = userRepository.findByEmail(request.getEmail()).orElseThrow(
() -> new IllegalStateException("없는 멤버입니다.")
);
if (!user.getPassword().equals(request.getPassword())) {
throw new IllegalStateException("비밀번호가 틀립니다.");
}
return new SessionUser(
user.getId(),
user.getUsername(),
user.getEmail()
);
}
4. 트러블 슈팅
if (user.getPassword().equals(request.getPassword())) {
throw new IllegalStateException("비밀번호가 틀립니다.");
}
if (!user.getPassword().equals(request.getPassword())) {
throw new IllegalStateException("비밀번호가 틀립니다.");
}
- 처음 비밀번호 확인 중 맞지 않는 경우가 아닌 맞는 경우로 예외처리를 해서 처음에 비밀번호가 맞는 상황에서 틀리다고 나와 코드를 수정했다.