포스트

[Flask] 회원 기능 구현하기 <3 : 회원탈퇴 구현하기>

0. 이전 글

1 : 로그인 구현하기

2 : 회원가입 구현하기

1. 구현점

  1. session에 저장된 회원 아이디로 관계형DB에서 검색하기
  2. 검색된 결과를 삭제하기

2. 코드

2.1 회원 삭제 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def delete_user(db, session):
    try:
        cursor = db.cursor()
        if 'username' in session:
            id_in_session = session['username']
            
            sql = """
                DELETE FROM users WHERE name = %s;
                """
            cursor.execute(sql,(id_in_session))
            db.commit()
            print("회원탈퇴 성공")
            return True
        else:
            return False
    except Exception as e:
        print("error : ", e)
        return False
    finally:
        db.close()

2.2 엔드포인트 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bp_withdrawal = Blueprint("sign_out", __name__, url_prefix = "/withdrawal")

@bp_withdrawal.route('/', methods = ['DELETE'])
def withdrawal():
    if request.method == 'DELETE':
        print(session)
        try:
            if delete_user(db, session):
				session.clear()
                return jsonify({"message": "회원탈퇴 성공"}), 200
            else:
                return jsonify({"error": "오류가 발생했습니다."}), 500
    
        except Exception as e:
            print("error : ", e)
            return jsonify({"error": e}), 500
   

Front 부분에서 이 엔드포인트를 session이 없을 경우엔 접근하지 못하도록 만드는 것을 상정했지만, 예외는 넣어주었다.

session이 없다면 False를 반환한다.

session에 username 이 있다면 쿼리를 실행해 삭제해주고, 회원탈퇴 성공 로그를 띄워준 뒤 True를 반환한다.

그 사이에 어떠한 에러가 난다면 캐치한 후 에러 로그 출력 뒤 False를 반환한다.

delete_user 함수를 실행하고 나면 if문으로 들어가 성공 시 회원탈퇴 성공을 json을 돌려주고, 실패 시 오류 발생 json을 돌려준다.

3. 실행 결과

먼저 로그인해 session에 회원 정보를 저장해준다.

DELETE 요청을 제대로 보낸 경우엔

회원탈퇴 성공 message가 보내진다.

회원 정보도 정상적으로 삭제된 것을 볼 수 있다.

로그아웃해 세션이 없는 경우를 테스트해봤다.

정상적으로 오류 메시지가 출력된다.

4. Next

현재 예제에선 특별한 행위 없이 세션에 user 정보가 존재할 경우 회원탈퇴 URL에 접근하는것 만으로 회원 탈퇴 기능을 구현했다.

하지만 실제 서비스에선 특정 문구를 입력한다거나, 혹은 아이디와 비밀번호를 한번 더 입력하는 방식으로 만들어도 괜찮을 것 같다.

다음엔 세션에 존재하는 정보로 db에서 검색한 후 회원정보 페이지에 리턴할 엔드포인트를 만들어보겠다.



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.