SpringSecurity & CRUD & AWS 4 회원가입

kik·2023년 12월 6일
0

회원가입 시 데이터를 받아줄 MemberRequestDto를 만들어 주었다.

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor

public class MemberRequestDto {
    private String memberId;
    private String name;
    private String password;
    private String auth;
    private String nickname;
}

MemberRepository도 만들었다.

나는 Spring Data Jpa로 jpa를 시작했었지만 김영한님의 강의를 보던중 jpa로 시작해서 공부하는 것이 맞다고 하셨기 때문에 이번엔 jpa를 공부하면서 할 예정이다.

import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    private final EntityManager em;

    public void save(Member member) {
        em.persist(member);
    }

}

securityConfig에

 @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

이 코드도 추가해준다.
이는 비밀번호를 쉽게 암호화 하는데 사용한다.

loginForm과 joinForm을 만들었다.

loginForm
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>로그인 페이지</title>
</head>
<body>
<h1>login</h1>
<hr/>
<form action="/login" method="POST">
  <input type="text" name="memberId" placeholder="id">
  <input type="password" name="password" placeholder="password">
  <button>로그인</button>
</form>
<a href="/joinForm">회원가입</a>
</body>
</html>

타임리프 방식도 공부하면서 사용해보기로 했다.

joinForm
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>회원가입 페이지</title>
</head>
<body>
<h1>signUp</h1>
<hr/>
<form th:object="${memberRequestDto}" th:action="@{/joins}" method="post" >
  <input type="text" th:field="*{memberId}" name="memberId" placeholder="아이디">
  <input type="password" th:field="*{password}" name="password" placeholder="비밀번호">
  <input type="text" th:field="*{name}" name="name" placeholder="이름">
  <input type="text" th:field="*{nickname}" name="userNickName" placeholder="닉네임">
  <button type="submit">회원가입</button>
</form>
</body>
</html>

memberController에 html로 이동하고 회원가입 하는 코드를 만들어준다.


private final MemberRepository memberRepository;
private final BCryptPasswordEncoder bCryptPasswordEncoder;


// 주소창에 joinForm을 쓰면 joinForm.html로 이동시키는 코드이다.
// memberRequestDto를 미리 선언해주고 html에서 사용할 수 있도록 해준다.
@GetMapping("/joinForm")
    public String joinForm(Model model) {
        model.addAttribute("memberRequestDto", new MemberRequestDto());
        return "joinForm";
    }
    
// 회원가입을 해주는 코드이다.
//트랜잭션 어노테이션을 꼭 사용해야 하고 롬복의 builder를 이용해 dto에서 Member 객체로 저장하고 리포지토리에서 db로 저장한다.
@Transactional
@PostMapping("/joins")
    public @ResponseBody String join(MemberRequestDto memberRequestDto) {

        String password = bCryptPasswordEncoder.encode(memberRequestDto.getPassword());

        Member.MemberBuilder builder = Member.builder()
                .memberId(memberRequestDto.getMemberId())
                .password(password)
                .nickname(memberRequestDto.getNickname())
                .name(memberRequestDto.getName())
                .auth("user");

        Member member = builder.build();
        memberRepository.save(member);
        
        return "joins";
    }

이렇게 하고 회원가입을 해주면

이렇게 저장이 된다.

1번은 bCryptPasswordEncoder를 사용하지 않았고
2번은 bCryptPasswordEncoder를 사용했다.

profile
신생아 개발자

0개의 댓글