티스토리 뷰

728x90
반응형

 

 

장고의 accounts/login을 이용하여 로그인/로그아웃을 구현해놓은 상태,

이렇게 구현하면 views.py에 로그인/로그아웃 관련 페이지 없이 기능이 구현됩니다

따라서 로그인폼에 action받는 경로가 없죠

그럼 어떻게 로그인/로그아웃 로그를 저장할까요?

 

 

아래는 스택오버플로우에서 가져온,

로그인, 로그아웃 시 누가 로그인을 했는지 ip, user정보를 가져올 수 있는 코드입니다

 

import logging
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from django.dispatch import receiver

log = logging.getLogger(__name__)

@receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):    
    # to cover more complex cases:
    # http://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django
    ip = request.META.get('REMOTE_ADDR')

    log.debug('login user: {user} via ip: {ip}'.format(
        user=user,
        ip=ip
    ))

@receiver(user_logged_out)
def user_logged_out_callback(sender, request, user, **kwargs): 
    ip = request.META.get('REMOTE_ADDR')

    log.debug('logout user: {user} via ip: {ip}'.format(
        user=user,
        ip=ip
    ))

@receiver(user_login_failed)
def user_login_failed_callback(sender, credentials, **kwargs):
    log.warning('login failed for: {credentials}'.format(
        credentials=credentials,
    ))

 

 

출처

https://stackoverflow.com/questions/37618473/how-can-i-log-both-successful-and-failed-login-and-logout-attempts-in-django

 

How can I log both successful and failed login and logout attempts in Django?

I want to record all user login and logout attempts in Django. This record should show a history of all users who logged in/out, IP address and time of login/logout. The django_admin_log table see...

stackoverflow.com

 

 

 

 

저는 몽고DB를 연동해놓았기 때문에,

사용자들이 로그인을 할 때마다 자동적으로 log라는 몽고DB 컬렉션에 넣도록 수정했어요.

로그인한 유저의 ip와 유저의 계정명(ID)이 DB에 삽입됩니다.

 

@receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):    
    ip = request.META.get('REMOTE_ADDR')
    log.insert_one({
                'date' : datetime.now(),
                'ip' : ip,
                'username': user.username
    })

 

 

로그인화면에 들어가서 로그인 하고 DB를 새로고침해보면

로그인 로그가 자동적으로 쌓인 것을 볼 수 있습니다

 

 

 

끝!

728x90
반응형
댓글