[Flask] Flask-Login

Alexandria·2023년 11월 10일
0

Python3 Flask

목록 보기
7/14
post-thumbnail

1. Flask-Login

사용자 인증 및 세션 관리를 쉽게 구현할 수 있도록 도와주는 패키지입니다.

주로 사용자가 로그인되어 있는지 확인하고, 로그인된 사용자의 정보에 쉽게 접근할 수 있도록 돕는 역할을 합니다.

💡 본 글은 예제 코드를 이용하여 설명합니다.

2. 설정

flask/source/my_app/__init__.py를 살펴보면 Flask-Login의 LoginManager 객체를 생성하였습니다. 이후 로그인매니저 객체를 초기화해주며, 로그인 페이지와 로그인 필요 메시지를 정의합니다.

로그인되어 있지 않은 상태에서 로그인이 되어야 하는 페이지에 접근 시, 로그인 페이지(index.login)로 리다이렉트 됩니다.

lm      = LoginManager()
# 코드 생략
def create_app():
    app.config.from_object(obj=config["development"])

    with app.app_context():
    	# 코드 생략
    
    	lm.login_view       = "index.login"
        lm.login_message    = "로그인이 필요합니다."
        lm.init_app(app=app)

3. 모델

로그인과 관련된 패키지이기 때문에 사용된 모델은 사용자 모델입니다.

flask/source/my_app/models/user.py를 살펴보면 User 클래스를 보면 지난 포스팅이 였던 Flask-SQLAlchemy에서 사용한 사용자 클래스임을 알 수 있을겁니다.

사용자 클래스에 UserMixin 객체를 상속하여 Flask-Login에서도 사용할 수 있습니다.

class User(db.Model, UserMixin):
	# 코드 생략

Flask-Login을 사용하기 위해서는 user_loader가 정의되어야 합니다. user_loader는 사용자 정보를 반환하는 데코레이터입니다.

사용자 정보를 반환하는 코드가 작성되어 있습니다.

@lm.user_loader
def load_user(user_id):
    return User.query.get(ident=int(user_id))

4. 로그인

flask/source/my_app/views/index.py를 살펴봅니다.

로그인이 되어 있지 않은 상태에서 로그인에 성공하면 login_user()에 의해 로그인 상태로 만들어 주며 current_user에 로그인한 사용자 정보가 설정됩니다.

아래 예시에 전달된 user 변수는 User 클래스 객체입니다.

login_user(user=user)

5. 로그아웃

flask/source/my_app/views/index.py을 살펴봅니다.

로그 아웃이 되려면 로그인이 되어있는 상태여야 합니다. @login_required는 로그인 상태에서만 접근이 가능하게 통제해주는 데코레이터입니다. 로그인이 되어있지 않으면 지정된 로그인 페이지로 리다이렉트됩니다.

@login_required

logout_user()에 의해 세션 정보가 삭제되어 로그 아웃이 되는 기능입니다.

logout_user()

6. 현재 사용자

flask/source/my_app/views/board.py는 새로운 게시글이 등록되는 코드 중 일부입니다.

게시글에는 글쓴이가 존재하며, username이라는 변수를 통해 정의되게 하였습니다. 이때, 글을 작성하려는 사용자를 Flask-Login의 current_user를 통해 지정할 수 있습니다.

current_user는 로그인에서 사용된 login_user()를 통해 지정됩니다.

new_post = Post(title=form.title.data, content=form.content.data, username=current_user.username, files=new_files)
profile
IT 도서관

0개의 댓글