django - 在 Django 应用程序的哪个部分对用户进行身份验证?
问题描述
我正在尝试使用会话限制用户多次登录以下是我的代码
我的模型
class LoggedInUser(models.Model):
user = models.OneToOneField(CustomUser, related_name='logged_in_user', on_delete =models.CASCADE)
session_key = models.CharField(max_length=40, null=True, blank=True)
def __str__(self):
return self.user.username
我的中间件
ef MySessionMiddleware(get_response):
def my_function(request):
if request.user.is_authenticated:
try:
user = LoggedInUser.objects.filter(user=request.user).first()
except:
user = LoggedInUser.objects.create(user=request.user)
if user.session_key:
#check whether old key is same as current
print('here inside user.session_key')
if user.session_key != request.session.session_key:
return JsonResponse("you already have a active session kindly logout from that",
status=400, safe=False)
user.session_key = request.session.session_key
user.save()
response = get_response(request)
return response
return my_function
我的中间件设置
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'pwned_passwords_django.middleware.PwnedPasswordsMiddleware',
'oneFA.middlewares.password_validator_middleware',
'oneFA.middlewares.MySessionMiddleware',
]
我的逻辑
我创建了一个模型,该模型使用我的身份验证模型 CustomUSer 和会话密钥存储具有 OnetoOne 字段的用户,然后每次我拨打电话时,我都试图检查当前会话密钥与前一个会话密钥,如果它不一样,那么用户正在尝试再次登录,所以我返回错误
我的错误
request.user.is_authenticated 总是假的,这意味着用户现在没有经过身份验证,我什至尝试将我的中间件放在身份验证中间件之前,并在做出响应后进行我的工作,即在返回周期中再次调用每个中间件但它给我同样的,所以当用户通过身份验证时我需要帮助,以便我可以检查会话密钥或需要在我的方法中进行更改
解决方案
推荐阅读
- tooltip - 如何在超集图表中编辑工具提示
- java - 按升序显示球的重量
- mapster - Mapster 从 ExpandoObject 到 Dto - 如何防止在 Dto 中将缺少的键设置为 Null?
- android - 如何仅在房间数据库中按日期和月份过滤数据而忽略年份
- apache-kafka - Apache Kafka Connect VS Kafka Connect 的融合连接器
- android - 带有 Android 的 Google Firebase 分析
- r - 在 R 华夫饼图中使图例符号小于默认值
- javascript - 完全限制 cookie 的浏览器设置 - 无法显示 javascript 消息
- java - 用于重构被滥用的 MVC 控制器类的 Java 模式
- python - 如何使 tkinter 文本框成为标准输入接收器?