회원가입을 해보자
일반적으로 생각해보면
일단, 이미 회원가입한 사람은 회원가입할 수 없다.
그렇다면 이미 회원가입했는지 어떻게 알까?
가입하려는 아이디 패스워드를 우리가 데이터베이스(DB)에 있는지 보면 된다.
어떻게 볼까?
비교해보는 것이다.
바로 중복!
중복확인을 해보자.
컴퓨터는 한번에 하나밖에 할 수 없으니,
아이디/이메일부터 중복 확인 후
패스워드 중복 확인을 하고
이 두개가 모두 없으면 회원가입을 할 수 있다!
[회원가입 흐름]
시작은 user
→ user가 email, password에 준다
→ front 가 화면에 띄움
→ front 가 B에 request 준다 (F -> B)
→ B: user data 받아서 생성
→ B: database (DB) 저장 = 추가 (mysql로 보면, user table에 한줄 추가되는 것)
( B: 1 rows changed 뜰 것)
→ B-> F 에 보내는 response 에 아래 3개가 담긴다
- Status code: 200, 201
- message: userCreated
- error
** F는 프론트엔드 / B는 백엔드이다
F는 중복 아이디를 알 수 없다 (pw 길이 정도는 알 수 있음 (JS 이용))
→ F는 request 보냄
→ B는 받고 곧바로 중복인지 알 수 없음
중복일 때 고객에게 alert 띄어줘야하는데..
B는 중복인지 알 수 없는데, 어떻게 알까?
- DB랑 비교해봐야 안다
비교하는 방법은?
- DB 열어서 확인 (근데 불가능. 가입할 때마다 못함)
- 이거를 이제 할 것 (sql문 쓰는 것)
중복가입인지 확인하는 방법
B가 userdata 받아오면, 갖고 있는 DB와 확인!
1. f 중복된 거 있으면, F에 error를 response 로 보냄. 끝!
(성공 or error 둘중 하나의 메세지만 보냄…. ‘성공인데 애매해' ‘성공인데 반은 나중에할께' 이런 거 없음)
2. If 없으면, 다음 과정 진행 —-> 가입
백엔드가 user data 받아와서 먼저 해야하는 거!
1. 프론트가 키를 다 잘 줬는지!
const {name, password, email} = me //me는 변수 , { } 안은 key // 여기 안에 user정보 담겨 있음
3개 키 다 들어왔는지 (name, password, email)
하나라도 없으면 throw // 프론트엔드, 다시 제대로 줘!
2. 이메일 중복 이미 가입한 케이스
2-1. 유저가 입력한 email 인 ‘shlee@wecode.co.kr’이 이미 DB에 있는지 확인
const existingUser = await myDataSource.query(‘SELECT id,
email FROM users WHERE email=’${email}’
console.log(‘existing user:’ , existingUser) // ${email} email 이라는 변수 ; 매번 email 적을 수 없으니
2-2. If yes, = 중복 = 아래 if문 중복 있으면 객체로 온다
if(중복이면), { const error = new Error(“Duplicated_EMAIL_ADDRESS”)
error.statusCode= 400
throw error} // 중복이면, 에러 , 끝
mysql 로 table 나옴 (select가 sql문이기 때문에)
2-3. If no, 중복 없으면 배열로 나온다
console 찍었을 때, select문 vscode에서는 중복이 없으면 빈 배열 [ ] 나옴.
(배열 나오는 이유: select문은 데이터 여러 개 가져오기에, 객체 없으면 배열)
// const {name, password, email} = me → 여기에서 userdata가져옴
mysql > use westagram
> show tables;
> select id, email From users; 를 하면, 모든 테이블이 나오고
전체 중에서 하나만 알고 싶으면
mysql> select id, email From users WHERE email = ‘shlee@wecode.co.kr’;
// 객체안의 id:1 id:3은 mysql 테이블의 id
// typeORM의 O는 object 객체 (객체에 넣어서 javascript로 관리)
// existingUser[0] 은 첫번째 객체
// .email dotnotation
'Wecode -Foundation 2 (부트캠프) > 인증, 인가 - 실습 (회원가입, 로그인)' 카테고리의 다른 글
Foundation Test: 인증-인가 기능이 담긴 백엔드 API를 만드는 과제 (주황색) ** (0) | 2023.09.10 |
---|---|
Foundation Test : 최종 '회원가입' '로그인' 코드 정리 (그림 그리고 공부하며 다시보기) (0) | 2023.09.07 |
Foundation Test를 위한, [백엔드 프론트 연결] 프론트엔드에게 '로그인' 시키기 (0) | 2023.09.07 |
Foundation Test를 위한, [백엔드 프론트 연결] 프론트엔드에게 '회원가입' 정보 받기 (0) | 2023.09.07 |