Search
Duplicate
👩🏻‍💻

회원가입

Tags
작업일지
Date
2023/05/18
Tags 2
스프링부트
Vue.js
URL
비고
사람

회원가입

스프링부트
UserVO.java
@Data public class UserVO { private String id; private String password; private String email; private String nickname; private String title; private boolean withdraw; }
Java
복사
UserMapper.java
@Mapper public interface UserMapper { // 회원 가입 void insertUser(UserVO userVo); }
Java
복사
UserService.java
@Service public class UserService { @Autowired private UserMapper userMapper; private final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); // 회원 가입 public void signup(UserVO userVO) { if (!userVO.getId().equals("") && !userVO.getEmail().equals("")) { // password는 암호화해서 DB에 저장 userVO.setPassword(passwordEncoder.encode(userVO.getPassword())); userMapper.insertUser(userVO); } } }
Java
복사
UserController.java
@Slf4j @RestController @RequiredArgsConstructor @RequestMapping(value = "user") public class UserController { @Autowired UserService userService; // 회원가입 @RequestMapping(value = "api/user/signup", method = RequestMethod.POST, consumes="application/json;") public void userRegister(@RequestBody UserVO userVO) { // 유저 코드 생성 Random random = new Random(); StringBuilder sb = new StringBuilder(); String id; for (int i = 0; i < 4; i++) { String randomNum = Integer.toString(random.nextInt(10)); sb.append(randomNum); } id = sb.toString(); userVO.setId(userVO.getNickname() + "#" + id); userService.signup(userVO); System.out.println(userVO); }
Java
복사
Vue.js
signup.js
import { defineStore } from "pinia"; import axios from "axios"; export const useSignupStore = defineStore("signup", { id: "signup", state: () => ({ password: "", email: "", nickname: "" }), getters: { errorPassword() { if (this.password.length === 0) return "☑ 비밀번호를 입력해줘. 6자 이상 이여야 해. 엣헴."; if (this.password.length < 6) return "☑ 비밀번호는 6자 이상 입력해야 된다니까~?"; return ""; }, errorEmail() { if (this.email.length === 0) return "☑ 이메일을 입력해줘. 아직 공란인걸?"; return ""; }, errorEmailForm() { if (!checkEmail(this.email)) return "☑ 이메일 형식이 이상해~ 다시 입력해줘."; return ""; }, errorNickname() { if (this.nickname.length === 0) return "☑ 닉네임을 입력해줘. 어떤 이름이 좋으려나~?"; return ""; }, canSignup() { return (this.password !== "") && (this.password.length >= 6) && (this.errorPassword === "") && (this.email !== "") && (this.errorEmail === "") && (this.errorEmailForm === "") && (this.nickname !== "") && (this.errorNickname === "") }, }, actions: { async register() { try{ await axios.post(`api/user/signup`, JSON.stringify(this.$state)); console.log(this.$state); alert("회원가입이 완료되었습니다."); } catch(e) { console.log('에러났어요'); } }, } }); // 이메일 유효성 검사 function checkEmail(email) { try { let pattern = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i; return (pattern.test(email)); } catch (error) { return false; } } // 이메일 중복검사
Java
복사
결과
콘솔
UserVO(id=123#9871, password=$2a$10$kO89mvuNJDjNxyTmj5wCZOO62xmNQami1KwRDC8no8KPqdmp9cl22, email=wldsmtldsm65@gmail.com, nickname=123, title=null, withdraw=false)
Java
복사
개발자 도구

해결해야할 것들

회원가입 후, 로그인 페이지로 이동
로그인
csrf 설정