LikeLion🦁
뛰슈 - LoginService
potatoo
2023. 8. 14. 14:26
728x90
LoginService 구현하기
로그인을 위한 메서드 구현을 했다.
Entity에 접근을 직접하는 것을 막기 위해서 DTO를 사용하고, 검증을 위한 annotation을 추가한다.
@Data
public class LoginDto {
@NotEmpty
@Size(max = 50)
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
String memberId;
@NotEmpty
@Size(min = 5, message = "비밀번호는 최소 5자 이상이어야 합니다.")
String password;
}
DTO를 JSON으로 받아온 데이터에서 파싱하여 비밀번호의 일치여부를 판별하여 Member를 전달하도록 구현했다.
@Slf4j
@Service
public class LoginService {
private final MemberJpaRepository memberJpaRepository;
@Autowired
public LoginService(MemberJpaRepository memberJpaRepository) {
this.memberJpaRepository = memberJpaRepository;
}
public Optional<Member> login(@Validated @RequestBody LoginDto loginDto){
return memberJpaRepository.findMemberByMemberId(loginDto.getMemberId())
.filter(m -> m.getPassword().equals(loginDto.getPassword()));
}
}
Service에서 받아온 Member를 가져와서 회원의 유무를 판별한다. 아직 session과 쿠키 부분은 구현이 완성되지 않았다.
@Slf4j
@RestController
public class LoginController {
private final LoginService loginService;
@Autowired
public LoginController(LoginService loginService) {
this.loginService = loginService;
}
@PostMapping("/login")
public SignUpResult login(@Validated @RequestBody LoginDto loginDto, BindingResult bindingResult, HttpServletRequest request){
if(bindingResult.hasErrors()){
log.info(bindingResult.toString());
return new SignUpResult("emptyBox");
}
Optional<Member> member = loginService.login(loginDto);
log.info("login {}",member);
if(member.isEmpty()){
return new SignUpResult("loginFail");
}
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER,member);
return new SignUpResult("true");
}
@PostMapping("/logout")
public SignUpResult logout(HttpServletRequest request){
HttpSession session = request.getSession();
if(session!=null){
session.invalidate();
}
return new SignUpResult("logout");
}
}
일단은 login과 logout Controller를 구현했다.
728x90