본문 바로가기
Project/소경관

[소경관] : 회원가입과 로그인 로직 수정하기

by 오주현 2022. 6. 2.
반응형

회원가입과 로그인 로직을 간단하게 수정했다.

 

원래 Repository 부분을 JpaRepository를 상속 받아 사용하지 않고 아래와 같이 별도의 클래스를 만들어 Spring Bean을 등록하고 EntityManage 의존성을 주입받아 사용했다.

 

public List<UserEntity> findById(String userId) {
    return em.createQuery("select m from UserEntity m where m.userId = :userId", UserEntity.class)
            .setParameter("userId", userId)
            .getResultList();
}


public List<UserEntity> findByEmail(String userEmail) {
    return em.createQuery("select m from UserEntity m where m.userEmail = :userEmail", UserEntity.class)
            .setParameter("userEmail", userEmail)
            .getResultList();
}

코드로 보면 위와 같다. 위에 두 로직은 회원가입을 하기 전에 이메일과 아이디의 중복 체크를 해 보는 로직이다.

 

    boolean existsByUserEmail(String userEmail);
    boolean existsByUserId(String userId);

위에 긴 로직을 JpaRepository를 상속받아 따로 메소드를 작성해서 간단하게 사용했다. 사실, 위 처럼 복잡하게 사용한 이유는 따로 커스텀해서 사용하려고 했는데 내가 만들고자 하는 프로젝트는 그렇게 복잡하지도 않고 간단하게 코드를 줄여서 작성하는 게 더 나을 것 같아서 아래처럼 줄여주었다.

 

리턴 타입은 boolean으로 해주고 아래와 같이 오류가 나면 Exception을 터트려줬고 Controller에서 try, catch로 잡아 msg, url 처리로 alert로 처리해 주기로 했다. 

 

---

 

로그인 부분은 아직 JpaRepository를 상속받아 구현하지는 않고 스프링 빈에 등록한 클래스에서 처리하고 있지만 세션 부분을 다시 수정해주었다.

 

boolean res = userService.login(userDTO);


if (res == true) {
    UserEntity dto = userService.loginSession(userDTO);
    session = request.getSession();
    session.setAttribute(SessionConst.LOGIN_MEMBER, dto);

위에서 로그인 로직을 거쳐와서 true일 경우 세션에 값을 담는데 그 전에 loginSession로직을 다시 실행시킨다.

 

List<UserEntity> userDTOList = iUserRepository.findAll();
UserEntity userEntity = userDTOList.get(0);

코드 내용은 위와 같다. JpaRepository에서 제공하는 findAll() 메소드를 통해 전부 불러왔고 이 것을 그대로 세션에 넣어줬다. 원래 전에는 아이디랑 비밀번호만 넣어줬는데 생각해 보니까 전부 다 값을 넣어주는 게 좋을 것 같아서 이렇게 수정하게 되었다.

 

비밀번호와 이메일에는 암호화를 걸어서 넣어주었는데 이메일은 복호화해서 가져와야 하는지 애초에 암호화를 안 걸지 고민하고 있다.

반응형

댓글