다잘하고싶어

[Spring] 로그인 구현1 본문

카테고리 없음

[Spring] 로그인 구현1

챙영잉 2022. 10. 7. 13:42

로그인 로직 구현 _ LoginService

  public Member login(String loginId, String password) {
        Optional<Member> findMemberOptional = memberRepository.findByLoginId(loginId);
        Member member = findMemberOptional.get(); 

        if (member.getPassword().equals(password)) {
            return member;
        }else {
            return null;
        }
    }

optional.get() 하면 안에 있는게 튀어나옴. 없으면 예외터짐.

위의 코딩을 아래와 같이 간단하게 표현할 수 있음

public Member login(String loginId, String password) {
    Optional<Member> byLoginId = memberRepository.findByLoginId(loginId);
    byLoginId.filter(m -> m.getPassword().equals(password))
            .orElse(null);
}

위의 코딩을 아래와 같이 간단하게 표현할 수 있음

public Member login(String loginId, String password) {
    return memberRepository.findByLoginId(loginId)
            .filter(m -> m.getPassword().equals(password))
            .orElse(null);
}

핵심로직:  회원을 조회한 다음, 파라미터로 넘어온 비밀번호와 메모리 상의 (또는 DB) 비밀번호가 같으면 회원을 반환하고, 다르면 null 을 반환한다.

LoginController

@Slf4j
@Controller
@RequiredArgsConstructor
public class LoginController {

    private final LoginService loginService;

    @GetMapping("login") //로그인 폼 보여줌
    public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
        return "login/loginForm";
    }

    @PostMapping ("login") //로그인 폼 보여줌
    public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "login/loginForm";
        }
        Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
        if (loginMember == null) { //회원을 못찾거나, 아이디 패스워드가 틀린 경우
            bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
            return "login/loginForm";
        }
        //로그인 성공처리 TODO
        return "redirect:/";
    }
}

 

 

Reference :

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard