spring_회원가입 기능구현

Today Jeeho Learned·2022년 6월 11일
0

Spring

목록 보기
12/31

회원가입 기능 구현

회원가입 정보를 저장하는 테이블 설계하기

요구사항과 디자인 UI를 확인하면서 어떤 정보가 저장되야 하는지 확인해야한다.
Signup페이지를 확인해보고서 테이블을 설계해보자

설계한 부분 적용

USER테이블

@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class User extends Timestamped {

    public User(String username, String password, String email, UserRole role) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.role = role;
    }
    // ID가 자동으로 생성 및 증가합니다.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    // 반드시 값을 가지도록 합니다.
    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String email;

    @Column(nullable = false)
    @Enumerated(value = EnumType.STRING)
    private UserRole role;
}

이렇게 user테이블을 설계했는데 특별하게 UserRole에서는 enum이라는 값을 사용해서 USER나 ADMIN값만들어올수있게 되었다.

관리자 회원 가입방법

  • 관리자 토큰을 알고 있는 회원들만 관리자로 회원가입할수있는데사실 현업에서는 엉성하게 관리자권한을 인가하는 경우는 드물다. 현업에서는 관리자 원한을 부여할 수있는 페이지를 따로 만들거나, 결제 과정을 거치면서 관리자 과정을 획득하는것이 일반적이다.

회원가입 API 구현

  • SignupRequestDto
package com.sparta.springcore.dto;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class SignupRequestDto {
    private String username;
    private String password;
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}
  • UserController
package com.sparta.springcore.controller;

import com.sparta.springcore.dto.SignupRequestDto;
import com.sparta.springcore.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    // 회원 로그인 페이지
    @GetMapping("/user/login")
    public String login() {
        return "login";
    }

    @GetMapping("/user/login/error")
    public String loginError(Model model) {
        model.addAttribute("loginError", true);
        return "login";
    }

    // 회원 가입 페이지
    @GetMapping("/user/signup")
    public String signup() {
        return "signup";
    }

    // 회원 가입 요청 처리
    @PostMapping("/user/signup")
    public String registerUser(SignupRequestDto requestDto) {
        userService.registerUser(requestDto);
        return "redirect:/";
    }
}
profile
기록해야 (살아)남는다 !

0개의 댓글