[python] Flask에서 세션 기반의 인증 처리하기

웹 애플리케이션을 개발할 때 가장 일반적인 요구사항 중 하나는 사용자 인증 및 세션 관리입니다. Flask를 사용하면 세션 기반의 사용자 인증을 쉽게 구현할 수 있습니다. 이를 통해 사용자가 로그인한 상태를 유지하고, 필요에 따라 접근 권한을 관리할 수 있습니다.

세션(Session)이란?

세션은 클라이언트와 서버 간의 상태를 유지하는 데 사용되는 방법입니다. 사용자가 웹 애플리케이션에 접속한 후에도 그 사용자의 상태를 계속해서 유지하기 위해 세션을 사용합니다. 세션은 각 사용자에게 고유한 세션 식별자(session ID)를 부여하여 해당 사용자의 상태를 식별합니다.

Flask에서의 세션 사용

Flask에서 세션은 session 객체를 통해 관리됩니다. 세션은 기본적으로 사용자의 브라우저 쿠키를 통해 저장되며, 기본적으로 안전하지 않으므로 중요한 데이터는 저장하면 안 됩니다.

아래 예시는 Flask 앱에서 세션을 사용하여 사용자 로그인 상태를 유지하는 방법을 보여줍니다.

from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)

# 세션에 사용자 아이디를 저장
def login_user(user_id):
    session['user_id'] = user_id

# 세션에서 사용자 아이디를 삭제
def logout_user():
    session.pop('user_id', None)

# 로그인된 사용자만 접근할 수 있는 페이지
@app.route('/dashboard')
def dashboard():
    if 'user_id' in session:
        return 'Welcome to the dashboard'
    return 'Unauthorized', 401

# 로그인
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 실제 로그인 처리 후, 사용자 아이디를 세션에 저장
        user_id = do_login(request.form['username'], request.form['password'])
        if user_id:
            login_user(user_id)
            return redirect(url_for('dashboard'))
        else:
            return 'Invalid username or password'
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=password name=password>
            <p><input type=submit value=Login>
        </form>
    '''

# 로그아웃
@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('login'))

if __name__ == '__main__':
    app.secret_key = 'super_secret_key'
    app.run()

이 예시에서는 session 객체를 사용하여 사용자의 로그인 상태를 관리하고, 로그인된 사용자만이 접근할 수 있는 페이지를 보호하는 방법을 보여줍니다.

Flask를 사용하여 세션 기반의 인증을 구현함으로써, 사용자의 로그인 상태나 권한을 쉽게 관리할 수 있습니다.

참고 자료