다른 모델에서 사용자 세션 매핑을 저장하십시오. 당신이 당신의 자신의 로그인보기가있는 경우
from django.conf import settings
from django.contrib.sessions.models import Session
from django.db import models
class UserSessions(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='user_sessions')
session = models.OneToOneField(Session, related_name='user_sessions',
on_delete=models.CASCADE)
def __str__(self):
return '%s - %s' % (self.user, self.session.session_key)
, 당신은이 모델을 직접 업데이트 할 수 있습니다
from django.contrib.auth.views import login as auth_login
def login(request):
auth_login(request)
if request.user.is_authenticated():
session = Session.objects.get(session_key=request.session.session_key)
user_session = UserSession.objects.create(user=request.user, session=session)
no_of_logins = request.user.user_sessions.count()
if no_of_logins > 1: # whatever your limit is
request.SESSION['EXTRA_LOGIN'] = True
# Do your stuff here
다른 옵션은 Signal을 사용하는 것입니다. Django는 신호를 제공합니다 : user_logged_in
, user_login_failed
및 user_logged_out
, Django 로그인보기를 사용하는 경우.
# signals.py
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver
@receiver(user_logged_in)
def concurrent_logins(sender, **kwargs):
user = kwargs.get('user')
request = kwargs.get('request')
if user is not None and request is not None:
session = Session.objects.get(session_key=request.session.session_key)
UserSessions.objects.create(user=user, session=session)
if user is not None:
request.session['LOGIN_COUNT'] = user.user_sessions.count()
# your login view
def login(request):
auth_login(request)
if request.user.is_authenticated() and request.session['LOGIN_COUNT'] > 1:
# 'LOGIN_COUNT' populated by signal
request.session['EXTRA_LOGIN'] = True
# Do your stuff
EXTRA_LOGIN
경우에는 이전 세션을 나열하고 로그 아웃 할 세션을 선택하도록 사용자에게 요청할 수 있습니다, True
입니다.(다른 그가 잠겨 될 수있다, 로그인에서 그를 중단하지 마십시오 - 그는 지금 자신의 이전 세션에 대한 액세스 권한이없는 경우) 사용자에
https://github.com/ sobotklp/django-throttle-requests –
안녕하세요. 감사. 나는 그것에 대해 들어 본 적이 없다. 그것을 들여다 보면 내 경우에 도움이되는지 알 수 있습니다. – Kakyoin
안녕하세요. 나는 [documentation] (http://django-throttle-requests.readthedocs.io/en/latest/configuration.html)을 방문했다. 사용자 계정 당 요청 횟수를 제한하는 규칙이없는 것처럼 보인다. 공유 할 모범이 있습니까? 감사! – Kakyoin