![](/img/trans.png)
[英]How to prevent user to access login page in django when already logged in?
[英]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.