File size: 2,577 Bytes
5883a42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# src/ auth.py
# ๊ธฐ์กด app.py์—์„œ auth์™€ ๊ด€๋ จํ•ด์„œ ๋ถ„๋ฆฌ
# ๋กœ๊ทธ์ธ์ด๋‚˜ ํšŒ์›๊ฐ€์ž… ์ธ์ฆ ๊ด€๋ จํ•œ ์Šคํฌ๋ฆฝํŠธ

from flask import Blueprint, render_template, request, redirect, url_for, session
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('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        # ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์‚ฌ์šฉ์ž์ธ์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ™•์ธ
        if User.query.filter_by(username=username).first():
            # (๋‚˜์ค‘์—๋Š” ํ”Œ๋ž˜์‹œ ๋ฉ”์‹œ์ง€ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ)
            return "์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์‚ฌ์šฉ์ž ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."

        # ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”
        new_user = User(username=username)
        new_user.set_password(password)
        
        # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ ๋ฐ ์ €์žฅ
        db.session.add(new_user)
        db.session.commit()
        
        # ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
        return redirect(url_for('auth.login'))

    # GET ์š”์ฒญ ์‹œ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์คŒ
    return render_template('signup.html')


# ๋กœ๊ทธ์ธ ํŒŒํŠธ
@bp.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
        user = User.query.filter_by(username=username).first()

        # ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
        if user and user.check_password(password):
            # ์„ธ์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ
            session.clear()
            session['user_id'] = user.id
            session['username'] = user.username
            
            # ๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ›„ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
            return redirect(url_for('main.home'))
        else:
            # (๋‚˜์ค‘์—๋Š” ํ”Œ๋ž˜์‹œ ๋ฉ”์‹œ์ง€ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ)
            return "๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."

    # GET ์š”์ฒญ ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์คŒ
    return render_template('login.html')

# ๋กœ๊ทธ์•„์›ƒ part
@bp.route('/logout')
def logout():

    # ์„ธ์…˜์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ์ œ๊ฑฐ
    session.clear()
    # ๋กœ๊ทธ์•„์›ƒ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
    return redirect(url_for('auth.login'))