Spaces:
Sleeping
Sleeping
| # 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') | |
| # ๋ก๊ทธ์ธ ํํธ | |
| 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') | |
| # ํ์๊ฐ์ ํํธ | |
| 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 | |
| def logout(): | |
| # ์ธ์ ์์ ์ฌ์ฉ์ ์ ๋ณด ์ ๊ฑฐ | |
| session.clear() | |
| # ๋ก๊ทธ์์ ํ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ | |
| return redirect(url_for('auth.login')) |