• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

로그아웃 기능 관련해 질문있습니다.

23.05.08 09:43 작성 23.05.08 10:25 수정 조회수 322

0

안녕하세요.
로그아웃 관련 질문있어서 글 남깁니다.

  1. 브라우저: safari

  2. 구독 후

  3. safari 브라우저 완전 종료

  4. safari 브라우저 재실행 및 재접속

  5. 구독 상태 유지 (session 365일 설정)

  6. '구독취소'버튼 클릭시
    AttributeError: 'AnonymousUserMixin' object has no attribute 'id'
    에러 발생

혹시 위 현상 관련해서 해결방법이 뭔지 알 수 있을까요?

 PS.

확인해보니, safari를 완전히 종료하고 재실행하면, remember_token 값은 이전 값과 일치하게 존재하는데,
session 값만 바뀌고 있습니다.
이 때문에, 기존의 user 객체를 가져오지 못하는 거 같은데, 이런 현상이 왜 발생하는걸까요?

 

 

- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)
- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다
- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변도우미입닏.

AttributeError: 'AnonymousUserMixin' object has no attribute 'id' 오류는 현재 세션에 사용자 정보가 없는 상태에서 구독 취소 버튼을 클릭했을 때 발생하는 것 같습니다.

우선은 Safari 브라우저 쿠키 설정 이슈일수도 있을 듯 한데요. 다음 단계로 한번 확인해보시면 좋을 것 같습니다.

  1. Safari를 열고, 오른쪽 상단의 'Safari' 메뉴를 클릭한 다음 '환경설정'을 선택합니다.

  2. '개인정보' 탭을 클릭합니다.

  3. '쿠키 및 웹 사이트 데이터' 옵션을 확인합니다. '모든 사이트로부터' 옵션을 선택하여 쿠키를 허용합니다.

다음으로 다음 3가지 설정도 확인 또는 추가해보시면 어떠실까요? 물론 몇가지는 이미 설정하신 것으로 이해는 되지만, 혹시 코드 자체에도 이슈가 있을 수 있으니, 한번 확인, 테스트해보셔도 좋을 것 같아요

  1. Flask 애플리케이션에서 permanent_session_lifetime 값을 설정하여 세션 유효 기간을 적절하게 설정하세요. 기본적으로 Flask는 세션을 31일간 유지하도록 설정되어 있지만, 다른 값으로 설정할 수도 있습니다. 예를 들어, 다음 코드는 세션 유효 기간을 365일로 설정합니다.

from datetime import timedelta

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=365)
  1. 사용자가 로그인할 때 remember 매개 변수를 사용하여 login_user() 함수를 호출하세요. 이렇게 하면 사용자가 로그아웃하거나 브라우저를 종료한 후에도 로그인 상태가 유지됩니다.

from flask_login import login_user

@login.route('/login', methods=['GET', 'POST'])
def login():
    # 로그인 로직
    remember = True  # 또는 request.form.get('remember', False, type=bool) 등을 사용하여 사용자의 입력을 확인
    login_user(user, remember=remember)
  1. Flask-Loginremember_cookie_duration 옵션을 설정하여 'remember me' 쿠키의 유효 기간을 조절할 수 있습니다. 기본값은 365일입니다. 예를 들어, 다음 코드는 유효 기간을 365일로 설정합니다.

from datetime import timedelta

login_manager = LoginManager()
login_manager.remember_cookie_duration = timedelta(days=365)

이외에 Safari의 버전을 확인하고 필요한 경우 업데이트해볼 수 있을 것 같고요. 또 세션 관리를 위해 사용하는 서드파티 라이브러리가 올바르게 작동하는지 확인해보셔도 좋을 것 같습니다.

감사합니다.