로그인, 로그아웃 기능

Red_Panda·2021년 3월 29일
0

회원가입 기능을 넣었으니 드디어 로그인 및 로그아웃 기능을 넣을수 있다.

먼저 form.py파일에 로그인 폼을 만든다.

다음으로 로그인 라우트 함수를 만든다.


auth_views.py 파일에 위와 같이 코드를 추가했다.

세션은 플라스크 서버를 구동하는 동안에 영구히 참조할 수 있는 값이다. 즉, 요청하는 URL이 바뀌어도 이 세션값을 이용할 수 있다. 단, 세션은 시간제한이 있어 일정 시간 접속하지 않으면 자동으로 삭제 된다.

웹은 웹 브라우저 요청 -> 서버 응답 순서로 실행되고, 서버 응답이 완료되면 웹 브라우저와 서버의 연결이 끊어진다. 근데 연결이 끊어졌는데도 이전과 같은 브라우저에서 요청했는지 구별할 수 있다.

바로 쿠키를 이용 한다.

웹 브라우저가 요청하면 서버는 쿠키를 생성해 전송하여 응답한다. 그러면 웹 브라우저는 이 쿠키를 저장하고, 다시 요청시 받았던 쿠키를 전송한다. 그러면 서버는 이전에 보낸 쿠키와 비교 하여 같은 웹 브라우저에서 요청한 것인지 구분한다.

이 다음으로 로그인화면인 로그인 템플릿을 만든다.

password의 경우 input type이 text가 아닌 password다. 이전에 만들었던 템플릿들이랑 비슷하다.
{%%}를 이용할때 %가 {에 달라붙어있어야 한다..
{ % 로 입력 했었더니 오류가 났다.


이제 정말 로그인기능이 되는지 확인하기위해 내비게이션바에 로그인 링크를 추가해 확인한다.

이전에 만들었던 아이디로 로그인을 해봤다.

사용자가 존재하지 않는 경우, 비밀번호가 틀린 경우 모두 잘 된다. 근데 로그인을 해도 화면이 변하는게 없어 진짜 로그인이 된지 모르겠다.

구분하는 방법 1번
로그인을 했을 경우, 내비게이션 바에서 로그인을 로그아웃으로 바꿔준다.



auth_views.py 파일에 로그인한 사용자 정보를 조회하는 함수를 만들었다.

@bp.before_app_request 애너테이션이 적용된 함수는 라우트 함수보다 먼저 실행된다.
g는 플라스크에서 제공하는 컨텍스트 변수인데, 요청 -> 응답 과정에서 유효하다.
session에 user_id값이 존재하면 g.user에 이를 조회하여 저장하면 사용자 로그인 검사시 session을 조사하지 않아도 된다.
g.user에 값 존재 여부만 알면된다.
g.user에는 User객체가 저장되어 있어, 다른 사용자 정보도 추가로 얻어낸다.

이 함수로 로그인 되어있는지 조회한 후 로그인이 되었을때 내비게이션바에서 로그아웃으로 나타낸다. 그리고 로그아웃 기능을 구현하면 된다.

g.user가 존재할경우 로그아웃만 없을경우 계정생성, 로그인 버튼이 출력된다.


로그아웃 기능은 매우 간단하다. 세션을 비워주면 된다. 세션을 비워주면 g.user가 None로 바뀌기 때문이다.
마지막으로 내비게이션 바에 로그아웃 버튼에 링크를 연결해준다.

profile
신입 개발자

0개의 댓글