본문 바로가기
API/MySQL API

회원가입 API

by 하니__ 2024. 5. 22.

 

 

우선 회원가입이니 유저 테이블을 만들어야 한다

 

간단히

유저이름과 이메일 패스워드를 받고

활성화인지 아닌지는 따로 체크

가입시간과 수정시간을 따로 체크

 

그리고 이제 API 설정부터 하자

 

새로운 데이터가 들어가니 POST

경로는 user의 register로 하자

 

그리고 이제

 

1. app.py 설정
api.add_resource(UserRegisterResource, '/users/register')

 

추가 해주고

 

2. user.py 설정

 

class UserRegisterResource(Resource) :
    def post(self) :
        # 1. 클라이언트가 보낸 데이터 받아준다
        data = request.get_json()

 

클라이언트가 보낸 데이터를 일단 받은 뒤

 

2 - 2. 데이터가 모두 있는지 확인

 

required_fields = ['username', 'email', 'password']
for field in required_fields:
     if field not in data or not data[field]:
        return {"result": "fail", "message": f"'{field}' field is missing"}, 400

 

입력 받는 데이터들을 리스트로 만든뒤

 

for 문과

if 문을 응용하여

 

예를 들면

유저네임 : 000
이메일 :
비번: 0000

의 경우와

유저네임: 000

비번: 000

의 두 경우 모두 잡아내는것

 

그리고 그후

2 - 3. 이메일 주소 형식이 올바른지 확인
try:
    validate_email(email)
except EmailNotValidError as e:
    return {"result": "fail", "message": str(e)}, 400

 

이메일 형식이 올바른지 확인후

알맞지 않다면 바로 리턴

 

2 - 4. 비밀번호 길이가 유효한지
예) 비번은 4자리이상 12자리 이하
if not len(data['password']) >= 4 or not len(data['password']) <= 12 :
    return {"result": "fail", "message": "Password 4-12"}, 400

 

설정상 비밀번호가 4자 이상 12자 이하라면 

알맞지 않을 시에 바로 리턴한다

 

3. 앞의 결과가 아무 이상 없다면 비밀번호를 암호화 한다

 

password = hash_password(data['password'])

 

 

 

4. DB 에 저장한다
try:
    connection = get_connection()
    query = '''insert into user
                (username, email, password)
                value
                (%s,%s,%s);'''
    record = (data['username'],data['email'],password)

    cursor = connection.cursor()
    cursor.execute(query,record)
    connection.commit()

    cursor.close()
    connection.close()

 

DB에 연결하고

받은 정보를 insert 하고

커서를 불러오고 실행하고 커밋하고

 

DB연결과 커서를 자원해제한다

 

5. 에러 상황도 리턴해준다
except Error as e:
    if cursor is not None:
        cursor.close()
    if connection is not None:
        connection.close()
    return {"result" : "fail","error": str(e)}, 500

 

 

6. user_id 를 바로 클라이언트에게 보내지않고
JWT로 암호화 하여 인증토큰을 보내야 한다

 

user_id = cursor.lastrowid

cursor.close()
connection.close()

 

DB에 회원가입하여 user 테이블에 insert된 후

이 user 테이블의 id값을 가져와야 한다

 

DB연결과 커서를 끊기 전으로 올라가서

커서의 마지막 행 아이디라는 기능을 사용하여

id값을 가져오자

access_token = create_access_token(user_id)

 

그리고 이것을 토큰 생성 한 뒤에

 

 

7. 클라이언트에게 JSON으로 리턴
return {"result" : "success", "access_token" : access_token }

 

 

하게 되면 성공메세지와

토큰을 보낼 수 있겠다

 

 

 

'API > MySQL API' 카테고리의 다른 글

Python으로 Mysql 접속, 로그아웃 API  (0) 2024.05.22
로그인 API  (0) 2024.05.22
게시글 비공개,공개하는 API  (0) 2024.05.21
게시글 삭제API, delete  (0) 2024.05.21
게시글 수정API, update  (0) 2024.05.21