簡體   English   中英

如何在django中防止多用戶登錄(注意:當第一個用戶登錄時,防止第二個用戶登錄)

[英]How to prevent multiple user login in django(note: When first user is login , prevent second user to login )

我正在使用 django auth 模塊開發 Django 應用程序,並希望防止使用相同的用戶名和密碼進行多次登錄。

它應該防止使用相同的用戶名和密碼在不同的機器上多次登錄。 當第二個用戶嘗試使用同一帳戶登錄時,除非第一個 logout ,否則第二個用戶不應獲得訪問權限。

也許你可以做這樣的事情(基於這個answer ):

首先,有一個模型來連接會話和用戶:

from django.conf import settings
from django.db import models
from django.contrib.sessions.models import Session

class UserSession(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    session = models.OneToOneField(Session, on_delete=models.CASCADE)

然后創建您的自定義身份驗證方法(創建custom backend ):

from django.contrib.auth.backends import ModelBackend

class MyBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
         if Session.objects.filter(usersession__user__username=username).exists():
             return None
         else:
             user = super().authenticate(request, username=username, password=password, **kwargs)
             if user:
                  request.session.save()
                  UserSession.objects.get_or_create(
                       user=user,
                       session=Session.objects.get(pk=request.session.session_key)
                  )
             return user

然后在settings.py使用這個后端:

AUTHENTICATION_BACKENDS = ['path.to.MyBackend']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM