我试图解决here描述的问题,但that answer中提供的代码不适用于最新的django==2.2
我尝试过移植这个代码,但是失败了
设置.py:
MIDDLEWARE = ['polls.mymiddleware.CookieMiddleware',
我的网站/民意调查/authbackend.py:
^{pr2}$我的网站/民意调查/我的中间件.py:
from django.contrib.auth import authenticate, login, ImproperlyConfigured
class CookieMiddleware(object):
"""Authentication Middleware for OpenAM using a cookie with a token.
Backend will get user.
"""
def process_request(self, request):
if not hasattr(request, 'user'):
raise ImproperlyConfigured()
if "thecookiename" not in request.COOKIES:
return
# token = request.COOKIES["thecookiename"]
# REST request to OpenAM server for user attributes.
# token, attribute, role = identity_manager.get_attributes(token)
# user = authenticate(remote_user=attribute['uid'][0])
user = authenticate(remote_user=1) # simplified for test
request.user = user
login(request, user)
结果:
File "C:\Users\Administrator\Desktop\my_scripts\mysite\mysite\wsgi.py", line 16, in <module>
application = get_wsgi_application()
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\core\wsgi.py", line 13, in get_wsgi_application
return WSGIHandler()
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\core\handlers\wsgi.py", line 135, in __init__
self.load_middleware()
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\core\handlers\base.py", line 37, in load_middleware
mw_instance = middleware(handler)
TypeError: object() takes no parameters
更新1:修复了上面的问题,感谢@Daniel_Rossman:
need to put your middleware after the SessionMiddleware in your MIDDLEWARE settings.
但现在有了新的问题:
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\utils\deprecation.py", line 93, in __call__
response = self.process_request(request)
File "C:\Users\Administrator\Desktop\my_scripts\mysite\polls\mymiddleware.py", line 22, in process_request
login(request, user, backend='polls.mymiddleware.CookieMiddleware')
File "C:\Users\Administrator\Desktop\my_scripts\venv\lib\site-packages\django\contrib\auth\__init__.py", line 126, in login
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
AttributeError: 'NoneType' object has no attribute '_meta'
[25/Apr/2019 12:40:07] "GET /admin/ HTTP/1.1" 500 64298
从
MiddlewareMixin
继承您的中间件,如下所示相关问题 更多 >
编程相关推荐