hfexample's picture
Deploy clean snapshot of the repository
e221c83
# src/ auth.py
# ๊ธฐ์กด app.py์—์„œ auth์™€ ๊ด€๋ จํ•ด์„œ ๋ถ„๋ฆฌ
# ๋กœ๊ทธ์ธ์ด๋‚˜ ํšŒ์›๊ฐ€์ž… ์ธ์ฆ ๊ด€๋ จํ•œ ์Šคํฌ๋ฆฝํŠธ
from flask import Blueprint, render_template, request, redirect, url_for, session, flash
import logging
from werkzeug.security import generate_password_hash, check_password_hash
from . import db
from .models import User
bp = Blueprint('auth', __name__, url_prefix='/auth')
# ๋กœ๊ทธ์ธ ํŒŒํŠธ
@bp.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
logging.warning(f"--- ๋กœ๊ทธ์ธ ์‹œ๋„: ์‚ฌ์šฉ์ž๋ช… '{username}' ---")
# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
user = User.query.filter_by(username=username).first()
if not user or not user.check_password(password):
flash('๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.')
# ๋กœ๊ทธ์ธ ์‹คํŒจ ์‹œ ๋‹ค์‹œ ๋กœ๊ทธ์ธ ํ™”๋ฉด(์•ž๋ฉด)
return render_template('auth_combined.html')
# ๋กœ๊ทธ์ธ ์„ฑ๊ณต
session.clear()
session['user_id'] = user.id
session['username'] = user.username
return redirect(url_for('main.home'))
return render_template('auth_combined.html')
# ํšŒ์›๊ฐ€์ž… ํŒŒํŠธ
@bp.route('/signup', methods=['GET', 'POST'])
def signup():
try:
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 1. ์ค‘๋ณต ์‚ฌ์šฉ์ž ํ™•์ธ
if User.query.filter_by(username=username).first():
flash('์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.')
# [ํ•ต์‹ฌ] ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์นด๋“œ๊ฐ€ ๋’ค์ง‘ํžŒ ์ƒํƒœ(ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด)๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด mode='signup'์„ ์ „๋‹ฌ
return redirect(url_for('auth.login', mode='signup'))
# 2. ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
new_user = User(username=username)
new_user.set_password(password)
db.session.add(new_user)
db.session.commit()
logging.warning("โœ… DB ์ €์žฅ ์„ฑ๊ณต: ์‚ฌ์šฉ์ž '{}'๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".format(username))
# 3. ๊ฐ€์ž… ์„ฑ๊ณต ์‹œ ๋กœ๊ทธ์ธ ํ™”๋ฉด(์•ž๋ฉด)์œผ๋กœ ์ด๋™
flash('ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธํ•ด์ฃผ์„ธ์š”.')
return redirect(url_for('auth.login'))
except Exception as e:
db.session.rollback()
logging.exception("๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ signup ํ•จ์ˆ˜์—์„œ DB ์˜ค๋ฅ˜ ๋ฐœ์ƒ! ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ")
return "Internal Server Error", 500
return render_template('auth_combined.html')
# ๋กœ๊ทธ์•„์›ƒ part
@bp.route('/logout')
def logout():
# ์„ธ์…˜์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ์ œ๊ฑฐ
session.clear()
# ๋กœ๊ทธ์•„์›ƒ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
return redirect(url_for('auth.login'))