[기초 API 구현 2] - 회원가입 제한사항 추가

박성규·2022년 5월 30일
0

[스프링 부트]

목록 보기
27/38
post-thumbnail
  1. Service
package com.spring.loginprac.service;

import com.spring.loginprac.dto.SignupRequestDto;
import com.spring.loginprac.model.UserRoleEnum;
import com.spring.loginprac.model.Users;
import com.spring.loginprac.repository.UserRepository;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.Optional;
import java.util.regex.Pattern;

@Service
public class UserService {
    private final PasswordEncoder passwordEncoder;
    private final UserRepository userRepository;
    private static final String ADMIN_TOKEN = "AAABnv/xRVklrnYxKZ0aHgTBcXukeZygoC";

    public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder){
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
    }
    public String signup(SignupRequestDto signupRequestDto) {
        String username = signupRequestDto.getUsername();
        String row_password = signupRequestDto.getPassword();
        String re_password = signupRequestDto.getRepassword();
        //패스워드 형식 확인
        //최소 3자 이상, 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성하기
        if(username.length() < 3){
            return "닉네임의 길이를 3 이상으로 해주세요.";
        }

        if(row_password.length() < 4){
            return "패스워드의 길이를 4자 이상으로 해주세요";
        }

        if(row_password.equals(username)){
            return "닉네임과 패스워드는 다르게 해주세요.";
        }

        if(row_password.equals(re_password)){
            if(Pattern.matches( "^[a-zA-Z0-9]*$",username)){
                String password = passwordEncoder.encode(row_password);
                String email = signupRequestDto.getEmail();
                UserRoleEnum role = UserRoleEnum.USER;

                Optional<Users> found = userRepository.findByUsername(username);

                if(found.isPresent()){
                    throw new IllegalArgumentException("중복된 ID가 존재합니다.");
                }


                if(signupRequestDto.isAdmin()){
                    if(!signupRequestDto.getAdminToken().equals(ADMIN_TOKEN)){
                        throw new IllegalArgumentException("관리자 암호가 틀립니다.");
                    }
                    role = UserRoleEnum.ADMIN;
                }

                Users users = new Users(username, password, email, role);
                userRepository.save(users);
                return "회원가입이 완료 되었습니다.";
            }else {
                return "아이디는 영문, 숫자를 혼합해 주세요";
            }
        }else{
            return "비밀번호가 같지 않습니다.";
        }

    }
}

회원가입 시 닉네임 길이, 패스워드의 길이 등을 제한사항으로 두고 서비스에 추가했다.

0개의 댓글

관련 채용 정보