Spaces:
Sleeping
Sleeping
File size: 2,922 Bytes
e221c83 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# 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')) |