회원가입
스프링부트
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 설정