Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 노트북덮개
- 로그남기기
- 서구동구예비군훈련장
- 인하멘토링
- 봉사활동
- 개발자를위한파이썬
- 인하대학교
- 프로그라피
- 타코트론
- Xangle
- 나는리뷰어다
- intell
- 인천남중
- graphicdriver
- 쇠막대기
- texttospeech
- 심플소프트웨어
- 개발자회고
- 프로그래머스
- 서버로그
- 신영준
- 놀이동산의슈퍼컴퓨터를작동시켜라
- tacotron
- jaypark.dating
- 한빛미디어
- 결과를얻는법
- 2019회고
- machinelearning
- CrossAngle
- 우분투비트확인
Archives
- Today
- Total
jc.jang
21강 중복 로그인 막기 (개선) 본문
주제
- 중복 로그인을 막기위해 구현한 코드를 수정한다.
노트
- 17강에서 중복 로그인을 막기 위해 Usersession 모델을 만들고 로그인할 때 마다 세션 값을 저장했다.
- 로그인 할 때 마다 Usersession을 확인하고 과거에 로그인한 세션에 'kicked'라는 key에 True를 할당하여 로그아웃하는 미들웨어도 추가했다.
- 하지만 test1로 로그인하고 다시 로그인 페이지로가서 test2로 로그인할 경우 UserSession 관련 에러가 발생한다.
- 무슨 에러일까?
- 디버깅 해보니, session_key가 없어서 발생하는 에러였다.
- 1. test1로 로그인한 상태 -> 2. test2의 ID, PASSWORD 입력 후 로그인 시도 -> 3. test2의 session_key 값을 UserSession 모델에 저장 -> 로그인 성공
- 위와 같은 순서로 로그인이 진행되는데, 어떠한 이유에서 인지는 모르겠지만 2단계에서 request.session_session_key 값이 none으로 나온다.
(제발 쿠키와 세션에 대해 알아보자.) - 그래서 아래와 같이 수정했다.
- accounts/models.py
def kicked_my_other_sessions(sender, request, user, **kwargs):
for user_session in UserSession.objects.filter(user=user):
session_key = user_session.session_key
session = SessionStore(session_key)
# session.delete()
session['kicked'] = True
session.save()
user_session.delete()
if not request.session.session_key:
request.session.create()
session_key = request.session.session_key
UserSession.objects.create(user=user, session_key=session_key)
- request.session.session_key가 없을 때 session_key 값을 만들어 준다.
- django session 소스코드(링크)를 참고하여 session_key 값이 없을 때 create하면 된다.
- request.session.create() vs request.session.save() stackoverflow 답변(링크)
- 나도 처음에 save를 사용했지만, save를 사용하면 기존의 세션 키와 충돌이 일어 날 수 있어서 create를 사용하는게 더 안전하다고 한다.
질문
- 새로운 로그인을 시도하면 세션이 none으로 설정되는 것 같다. --> 맞는지 모르겠다ㅠ
- 쿠키와 세션을 알아보자!
날짜
- 오전 11시, 20190911
'Django > Django - 인증편' 카테고리의 다른 글
20강 회원가입 시에 프로필 정보 받기 (0) | 2019.09.09 |
---|---|
19강 프로필 수정 구현 (0) | 2019.09.09 |
18강 SignupForm에 Meta.model 적용하기 (0) | 2019.09.09 |
17강 중복 로그인 막기 (0) | 2019.09.09 |
16강 Permission 시스템을 통한 사용자 접근 제한하기 (2) | 2019.09.09 |
Comments