반응형
먼저 세션과 쿠키의 개념을 알아야한다.
쿠키란?
- 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 데이터파일이다.
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
세션이란?
- 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
- 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
이로써, 로그인을 구현하기 위해서는 세션이 필요하다. flask에 session 모듈을 import한다.
1. View - login.html
클라이언트에서 요청했을 때 보여줘야 하는 페이지를 register.html을 기반으로 생성한다. body부분을 제외하고 동일하므로 body부분만 적겠다.
...
<body>
<div class="container">
<div class="row mt-5">
<h1>로그인</h1>
</div>
<div class="row mt-5">
<div class="col-12">
<form method="POST">
{{form.csrf_token}}
<div class="form-group">
{{form.userid.label("아이디")}}
{{form.userid(class="form-control", placeholder="아이디")}}
</div>
<div class="form-group">
{{form.password.label("비밀번호")}}
{%if form.password.errors%}
{{form.password.errors.0}}
{%endif%}
{{form.password(class="form-control", placeholder="비밀번호")}}
</div>
</div>
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
</div>
</div>
</body>
...
2. Control - app.py
/login으로 들어왔을 때 처리해야하는 비즈니스 로직을 작성해보자.
from flask import session
...
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
print('{}가 로그인 했습니다.'.format(form.data.get('userid')))
ssession['userid'] = form.data.get('userid')
return redirect('/')
return render_template('login.html', form=form)
...
session 변수에 값만 저장해주면 알아서 클라이언트가 구분되고, 세션정보 또한 사용할 수 있다. 굉장히 편하게 세션을 관리할 수 있다.
3. form 생성
유효성을 검사하기 위해서 wtf 패키지를 이용할 form을 생성한다.
class LoginForm(FlaskForm):
class UserPassword(object):
def __init__(self, message=None):
self.message = message
def __call__(self, form, field):
userid = form['userid'].data
password = field.data
fcuser = Fcuser.query.filter_by(userid=userid).first()
if fcuser.password != password:
raise ValueError('Wrong Password!')
userid = StringField('userid', validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired(), UserPassword()])
아이디 : asdf1234
비밀번호 : asdf
반응형
'PNU DSC > Solution Challenge' 카테고리의 다른 글
Flask 14. 백엔드와 프론트엔드 (0) | 2020.03.11 |
---|---|
Flask 12. 로그아웃 (0) | 2020.03.11 |
Flask 10. static 파일 관리하기 (0) | 2020.03.10 |
Flask 09. Flask-WTF (0) | 2020.03.10 |
Flask 08. 회원관리 - Controller (0) | 2020.03.09 |