기능 만들기

이번 실습은 로그인, 로그아웃과 관련된 기능을 작성하려고 합니다.

로그인은 데이터베이스의 정보와 입력받은 정보를 비교한 후, 일치한다면 session에 사용자를 식별할 수 있는 정보를 넣어 주는 과정을 말합니다.

로그아웃은 저장되어있던 session 정보를 없애주는 기능을 말합니다.

session을 사용해서 로그인/로그아웃을 구현하세요.

추가 설정API를 설정해 주는 부분에는 여러 가지 설정을 추가할 수 있습니다. 모든 요청 전에 실행하는 함수인 **before_app_request**를 활용해서 요청마다 로그인된 사용자가 있는지 파악하도록 하겠습니다.

%%

requirements.txt

flask_sqlalchemy
pymysql
@board.before_app_request
def load_logged_in_user():
    user_id = session.get('login')
    if user_id is None:
        g.user = None
    else:
        g.user = db.session.query(User).filter(User.id == user_id).first()

지시사항

  1. api.py 파일에서, /login url을 가진 login() 함수를 작성하세요. GET과 POST 모두 사용할 수 있는 함수로 작성하세요.

  2. */login*으로 들어오는 요청이 POST 일 경우 **user_id*와 **user_pw*를 화면에서 받아오는 코드를 작성하세요.

    user_id = request.form['user_id']
    user_pw = request.form['user_pw']
    
  3. 사용자 id(user_id)를 기준으로 데이터베이스에서 사용자를 검색한 후 하나의 모델을 user 변수에 저장하세요.

    user = User.query.filter(User.user_id == user_id).first()
    
  4. 3번에서 가져온 user 변수가 **None*이 아니라면 bcrypt 모듈을 사용해서 데이터베이스 내의 암호화 된 값과 입력받은 현재의 값이 일치하는지 검사하는 기능을 작성하세요.

  5. before_app_request 함수를 응용하여 모든 request를 하기 전에 실행되는 함수에서 로그인한 사용자를 판단하는 기능을 작성하도록 하겠습니다. 아래의 코드를 api.py 상단에 붙여넣으세요.

    @board.before_app_request
    def load_logged_in_user():
            user_id = session.get('login')
            if user_id is None:
                    g.user = None
            else:
                    g.user = db.session.query(User).filter(User.id == user_id).first()
    
    
  6. 로그아웃은 session을 **None*으로 설정 해 주는 기능입니다. /logout url을 선언하고 session을 **None*으로 설정하는 **logout()*함수를 작성하세요. 반환값은 redirect('/') 으로 설정하세요.

  7. 로그인을 위한 화면에서 user_id, **user_pw*를 전달하기 위해 **login.html*을 수정하세요. **login()*함수를 아래의 조건에 맞게 작성하세요

Tips!