우선 API 설정부터 시작하자
API 설정
로그인을 하려 한다고 할때
정보를 입력할테니
HTTP 메소드는
POST로 해야한다
경로는 user의 login으로 하면 되겠다
그리고 입력하는 정보로는
보통의 id가 되는 유니크한값 이메일과 패스워드만 한다
app.py 설정
api.add_resource(UserLoginResource, '/users/login')
평소와 같이 경로를 적어주고
user.py 설정
회원가입 때와는 다른 클래스로 설정한다
class UserLoginResource(Resource) :
def post(self) :
# 1. 클라이언트로부터 데이터 받아온다
data = request.get_json()
1. 입력받은 이메일과 패스워드가 존재하는지, 비어있는 데이터는 없는지 확인
if 'email' not in data or 'password' not in data:
return{"result": "fail"}, 400
if data['email'].strip() == '' or data['password'].strip() == '':
return {"result": "fail"}, 400
데이터 자체를 누락한 경우와
키값은 있고 밸류는 없는 Null 상황을 찾아
그렇다면 실패 메세지를 리턴한다
2. 입력받은 이메일과 같은 정보를 가져온다
try :
connection = get_connection()
query = '''select *
from user
where email = %s ;'''
record = ( data['email'] , )
cursor = connection.cursor(dictionary=True)
cursor.execute(query,record)
result_list = cursor.fetchall()
cursor.close()
connection.close()
3. 에러상황에도 대처한다
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
4. 회원인지 확인 아니라면 리턴
if result_list == [] :
return {"result" : "fail"}, 401
입력 받은 이메일과 일치하는 정보를 찾았을때
그 정보가 없다면 [ ] 비어있는 리스트를 가져오기 때문에
회원가입이 안 되어있다는 이야기 이므로
실패 메세지와 함께 리턴한다
5. 비밀번호 체크 아니라면 리턴
isCorrect = check_password(data['password'], result_list[0]['password'])
if isCorrect == False :
return {"result" : "fail"}, 401
앞의 과정을 통과했다면
이번엔 비밀번호가 맞는지를 확인 해야한다
하지만 유저가 입력한 비밀번호는 해싱처리 되어 다르게 저장 되어있기 때문에
유저가 입력한 번호와 해싱된 번호가 매칭되는지 체크하는 과정이 필요하다
그리고 그 체크 결과 입력번호가 다르다면
실패 메세지와 함께 리턴한다
6. id번호를 가져와 인증토큰 생성
user_id = result_list[0]['id']
accses_token = create_access_token(user_id)
일련의 과정을 거쳐 모두 맞았다면
해당하는 id를 가져온 뒤
그 아이디를 인증토큰을 생성한다
7. 클라이언트에게 JSON으로 리턴
return {"result" : "success", "access_token" : accses_token}
그리고 결과값과 인증토큰을 클라이언트에게 보낸다
그렇게 하면 성공 메세지와 함께 인증토큰을 클라이언트에게 보내지게 된다
'API > MySQL API' 카테고리의 다른 글
Python으로 Mysql 접속, 회원탈퇴 API (0) | 2024.05.24 |
---|---|
Python으로 Mysql 접속, 로그아웃 API (0) | 2024.05.22 |
회원가입 API (0) | 2024.05.22 |
게시글 비공개,공개하는 API (0) | 2024.05.21 |
게시글 삭제API, delete (0) | 2024.05.21 |