如何从不同的位置检测到Django Web应用程序的多次登录?

我只想在Django应用程序中一次只允许一个身份验证的会话进行个人登录。因此,如果用户在给定的IP地址上登录了网页,并且使用相同的用户凭据从不同的IP地址进行登录,我想做某事(注销第一个用户或拒绝访问第二个用户)。
不知道这是否仍然需要,但以为我会分享我的解决方案:

1)安装django-tracking(谢谢你的那个提示Van Gale Google Maps GeoIP很棒!)

2)添加这个中间件:

from django.contrib.sessions.models import Session
from tracking.models import Visitor
from datetime import datetime

class UserRestrictMiddleware(object):
    """
    Prevents more than one user logging in at once from two different IPs
    """
    def process_request(self, request):
        ip_address = request.META.get('REMOTE_ADDR','')
        try:
            last_login = request.user.last_login
        except:
            last_login = 0
        if unicode(last_login)==unicode(datetime.now())[:19]:
            previous_visitors = Visitor.objects.filter(user=request.user).exclude(ip_address=ip_address)
            for visitor in previous_visitors:
                Session.objects.filter(session_key=visitor.session_key).delete()
                visitor.user = None
                visitor.save()

3)确保它在VisitorTrackingMiddleware之后,您应该会发现以前的登录在有人新登录时会自动碰撞:)

http://stackoverflow.com/questions/821870/how-can-i-detect-multiple-logins-into-a-django-web-application-from-different-lo

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何从不同的位置检测到Django Web应用程序的多次登录?