python - 用户通过 chrome 自动登录时出现“会话匹配查询不存在”错误
问题描述
当用户通过 chrome 自动登录时,网站出现“会话匹配查询不存在”错误。该错误发生在确保用户无法在不同浏览器中登录的中间件中。
from django.contrib.sessions.models import Session
class OneSessionPerUser:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if request.user.is_authenticated:
current_session_key = request.user.logged_in_user.session_key
if current_session_key and current_session_key != request.session.session_key:
Session.objects.get(session_key=current_session_key).delete()
request.user.logged_in_user.session_key = request.session.session_key
request.user.logged_in_user.save()
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
有人知道这里可能是什么问题,或者有人知道如何禁用 chrome 自动登录吗?
解决方案
问题在这里:
if current_session_key and current_session_key != request.session.session_key:
Session.objects.get(session_key=current_session_key).delete()
我遇到了同样的问题,据我了解,您应该更改 get for 过滤器。因为如果 get 没有得到答案,他就会抛出这个错误。使用过滤器,过滤器可以是一个空查询。所以我做了:
if current_session_key and current_session_key != request.session.session_key:
Session.objects.filter(session_key=current_session_key).delete()
在此之后,一切都很好。没有更多奇怪的错误。
编辑:
在我的伙伴提出了一些好的观点之后,发生的事情是会话密钥被删除或销毁,所以,当你应用 get 时,它没有得到答案,因为没有空值可以得到,这就是它吐出的原因错误。使用过滤器,您仍在搜索空值,但在这种情况下,您可以获得空查询,并且由于值是唯一的,您不会一次取出两个会话。
对不起,如果我的英语不好,这不是我的第一语言。
推荐阅读
- json - TypeScript 从 API 获取数据
- javascript - :hover 上的第二个动画在 mouseout 时重置第一个动画
- android - 迁移到新的 Places SDK 客户端会产生错误
- c++ - 用于存储航班的 LinkedQueue 实现
- typescript - React-Native:createRefCannot 添加属性值,对象不可扩展
- git - 无法在 Jenkins 中克隆 Git 项目
- promise - 量角器,在量角器调用后我必须使用 then() 吗?
- php - 测试未链接到任何路由的控制器方法
- c# - 试图将整个窗口绑定到用户控件
- ubuntu - 无法在 Ubuntu 16.04 中将 .pem 证书添加为受信任的根证书