我想一次只允许一个经过身份验证的会话在我的 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 之后,您应该会发现当有人新登录时,以前的登录会自动被碰撞:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)