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