개발세발은 안되요

Flask | 로그인(Login) & 로그아웃(Logout) & 세션(Session) 본문

Web

Flask | 로그인(Login) & 로그아웃(Logout) & 세션(Session)

금호박 2022. 12. 16. 19:52

Session이란?

플라스크에서 로그인 기능을 구현하기 위해서는 세션(session)을 이용해야 한다. 세션은 사용자 정보를 담고있는 객체로, 데이터는 flask에 의 해 암호화된다. 그렇기 때문에 secret key가 필요하다.

세션 외에 사용자 데이터로 쿠키(cookie)도 있지만, 세션은 데이터를 클라이언트 브라우저에 저장한다는 점에서 쿠키와 차이가 있다.

 


로그인(Login)

1. application.py

최종 코드는 이러하다.

 

 

우선 id와 pw값을 입력받는다.

 id_ = request.form['id'] #id 입력받기
 pw = request.form['pw'] #pw 입력받기

 

 

 

우리가 DB에서 비교해야할 실제 pw는 입력받은 pw가 아니라 pw로 만들어낸 해시값이다. 따라서 pw 해시를 만든다.

pw_hash = hashlib.sha256(pw.encode('utf-8')).hexdigest()

 

 

 

아래의 조건문은 로그인의 성공 여부를 확인하는 부분이다.

#DB 등록된 사용자인 경우 <- DB.find_user() 이용
if DB.find_user(id_,pw_hash):
     session['id']=id_	#session에 id 정보 넣어주기
     return redirect(url_for('list_restaurants')) # 로그인 성공 후 이동할 화면
     
#DB에 등록되지 않은 사용자인 경우
else:
     flash("Wrong ID or PW!")	# 로그인 실패 메시지 
     return render_template("login.html")	# 로그인 화면으로 다시 이동

 

 

 

2. database.py

이때 이용할 find_user()은 다음과 같이 작성한다.

DB구조에 따라 달라질 수 있으니, 참고만 하세용

 


로그아웃(Logout)

로그아웃은 application.py에 아래의 코드만 작성해두면 된다.

session.clear() : session에 세팅해둔 값을 지운다. 이 경우 id값이 지워진다.

 


추가 : 페이지에서 session 참조하기

로그인하기 전과 로그인한 후 페이지에 변화를 주고 싶을 수 있다. 이 경우 페이지에서 session을 참조하면 된다. 

베너에 변화를 주는 것을 예로 보이겠다.

 

index.html 등 원하는 페이지에 session을 참조하는 코드를 작성한다.

 

 

 

로그인하기 전 베너의 모습
로그인 후 베너의 모습

'Web' 카테고리의 다른 글

Goormide 이용법 & 공유 컨테이너 & GitHub 연동  (0) 2022.12.16
Flask | 동적 라우팅(Dynamic Routing)  (0) 2022.12.16