Project/소경관

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

오주현 2022. 6. 2. 23:46
반응형

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

 

원래 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() 메소드를 통해 전부 불러왔고 이 것을 그대로 세션에 넣어줬다. 원래 전에는 아이디랑 비밀번호만 넣어줬는데 생각해 보니까 전부 다 값을 넣어주는 게 좋을 것 같아서 이렇게 수정하게 되었다.

 

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

반응형