📌 개념 정리
Flask-Login은 Flask 프레임워크에서 사용자 인증을 쉽고 효율적으로 구현할 수 있도록 도와주는 파이썬 라이브러리입니다. 로그인, 로그아웃, 사용자 세션 유지 및 보호된 페이지 접근 제어와 같은 기본적인 사용자 인증 관련 기능을 손쉽게 처리할 수 있습니다.
이 라이브러리를 사용하면 복잡한 인증 로직을 간결하고 효율적으로 구성할 수 있으며, 특히 세션 관리와 인증 프로세스를 자동화하여 개발자의 업무를 크게 줄여줍니다.
🚦 동작 원리 및 구조
Flask-Login은 다음 세 가지 주요 기능을 제공합니다:
- 사용자 인증 관리: 로그인, 로그아웃 처리 및 현재 로그인한 사용자의 정보 관리
- 세션 관리: 로그인한 상태를 유지하고 세션을 관리하여 사용자 경험을 개선
- 보호된 페이지 접근 제한: 인증되지 않은 사용자의 보호된 페이지 접근을 자동으로 차단하고 로그인 페이지로 리디렉션
💻 코드 예시 및 단계별 흐름 분석
🔹 프로젝트 구조
project/
├── app.py
├── models.py
├── routes.py
└── templates/
├── index.html
└── login.html
1️⃣ app.py
- Flask 앱 설정 및 로그인 관리 객체 초기화
from flask import Flask
from flask_login import LoginManager
from models import User
app = Flask(__name__)
app.secret_key = 'your_secret_key' # 세션 보안을 위한 시크릿 키 설정
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login' # 인증되지 않은 사용자를 위한 로그인 페이지
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
from routes import configure_routes
configure_routes(app)
if __name__ == "__main__":
app.run(debug=True)
2️⃣ models.py
- 사용자 모델 정의 및 간단한 사용자 데이터 관리
from flask_login import UserMixin
# 예제 사용자 데이터
users = {'admin': {'password': 'secret'}}
class User(UserMixin):
def __init__(self, username):
self.id = username
@staticmethod
def get(user_id):
if user_id in users:
return User(user_id)
return None
3️⃣ routes.py
- 경로 설정 및 로그인, 로그아웃, 보호된 페이지 구성
from flask import render_template, redirect, url_for, request, flash
from flask_login import login_user, logout_user, login_required
from models import User, users
def configure_routes(app):
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.get(username)
if user and users[username]['password'] == password:
login_user(user)
return redirect(url_for('index'))
else:
flash('잘못된 사용자 이름 또는 비밀번호입니다.')
return render_template('login.html')
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('index'))
@app.route('/protected')
@login_required
def protected():
return '<h1>인증된 사용자만 접근 가능한 페이지입니다.</h1> <a href="/logout">로그아웃</a>'
4️⃣ templates/index.html
- 홈 페이지 템플릿
<!DOCTYPE html>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>홈 페이지에 오신 것을 환영합니다!</h1>
<a href="/login">로그인</a> |
<a href="/logout">로그아웃</a> |
<a href="/protected">보호된 페이지</a>
</body>
</html>
5️⃣ templates/login.html
- 로그인 페이지 템플릿
<!DOCTYPE html>
<html>
<head>
<title>로그인</title>
</head>
<body>
<h1>로그인</h1>
<form method="post">
사용자 이름: <input type="text" name="username" /><br />
비밀번호: <input type="password" name="password" /><br />
<input type="submit" value="로그인" />
</form>
</body>
</html>
🧪 실전 사례
- 사용자가 /login 페이지에서 로그인하면, 인증된 사용자만 접근 가능한 /protected 페이지에 접근할 수 있습니다.
- 로그인하지 않은 상태에서 /protected 페이지에 접근하면 자동으로 로그인 페이지로 리디렉션됩니다.
🧠 고급 팁 & 자주 하는 실수
- 비밀번호 보안: 실 서비스에서는 bcrypt나 argon2와 같은 알고리즘을 사용하여 비밀번호를 해시로 안전하게 저장해야 합니다.
- 세션 관리 강화: 로그인 상태 유지를 위해 세션 타임아웃 설정 및 remember_me 옵션 사용을 고려하세요.
- 로그인 실패 처리: 로그인 시 실패 메시지 처리 외에도 실패 횟수를 기록하고 일정 횟수 초과 시 계정을 잠그는 등의 추가 보안 장치를 마련하는 것이 좋습니다.
✅ 마무리 요약 및 복습 포인트
- Flask-Login을 통해 손쉽게 사용자 인증 기능 구현 가능
- 로그인과 로그아웃 기능은 각각 login_user(), logout_user() 함수를 사용
- 보호된 페이지 접근 시 @login_required 데코레이터 사용
- 예제를 통해 간단한 사용자 인증 시스템 구축 및 관리 가능
이 가이드를 활용하여 보다 안전하고 효율적인 Flask 애플리케이션을 구축해 보세요! 😊
'Flask' 카테고리의 다른 글
Chapter 5-3 Flask와 Jinja를 활용한 사용자 관리 웹 애플리케이션 (0) | 2025.04.23 |
---|---|
Chapter 5-2 Flask Authentication / Flask-JWT-Extended (0) | 2025.04.23 |
Chapter 4-8(1) Flask 애플리케이션에서 HTTP 기본 인증 사용 (0) | 2025.04.22 |
Chapter 4-7(1) 로그인, 세션 관리 및 보안 페이지 Authentication/ Session (0) | 2025.04.22 |
Chapter 4-8 HTTP 기본 인증 Basic Authentication, Flask-HTTPAuth (0) | 2025.04.22 |