Sono di fronte a un problema con la mia vista di autenticazione/login. Questo sistema funzionava prima, ma di recente sono passato a un nuovo server e non riesco a farlo riparare.Django Rest Framework - Request.user è sempre AnonymousUser e request.POST è vuoto
Quando si tenta di accedere tramite la visualizzazione auth, request.user è sempre un AnonymousUser come se non avessi fornito le credenziali di autenticazione. Ho provato a registrare la request.POST ma sembra essere un ditt vuoto.
Ho un traceback qui:
Environment:
Request Method: POST
Request URL: http://45.55.149.3:8000/api/auth/
Django Version: 1.8.3
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'webapp',
'rest_framework',
'djrill')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
456. response = self.handle_exception(exc)
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
453. response = handler(request, *args, **kwargs)
File "/home/appointments-app/appointments/webapp/views.py" in post
40. login(request, request.user)
File "/home/appointments-app/venv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login
111. request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
Exception Type: AttributeError at /api/auth/
Exception Value: 'AnonymousUser' object has no attribute '_meta'
Qui ho l'API vista di autenticazione, che sta fallendo:
class AuthView(APIView):
authentication_classes = (QuietBasicAuthentication,)
def post(self, request, *args, **kwargs):
login(request, request.user)
return Response(OldUserSerializer(request.user).data)
def delete(self, request, *args, **kwargs):
logout(request)
return Response({})
sotto è la classe di autenticazione che sto usando:
from rest_framework.authentication import BasicAuthentication
class QuietBasicAuthentication(BasicAuthentication):
# disclaimer: once the user is logged in, this should NOT be used as a
# substitute for SessionAuthentication, which uses the django session cookie,
# rather it can check credentials before a session cookie has been granted.
def authenticate_header(self, request):
return 'xBasic realm="%s"' % self.www_authenticate_realm
Non mi è chiaro cosa stai cercando di fare. Di solito, dovresti usare le informazioni nella richiesta per recuperare un utente, quindi chiamare 'login (richiesta, utente)' per registrarle. Chiamare 'login (richiesta, request.user)' non ha senso - se 'richiesta. utente 'non era anonimo, non ci sarebbe bisogno di registrarli. – Alasdair
@Alasdair sembra che non possa accedere alle credenziali inviate nella richiesta Ajax. come ho detto request.POST sembra essere vuoto, request.user non li contiene, né request.username o request.password per esempio quali sono le chiavi inviate nella richiesta. –
Quali sono i contenuti di 'request.body'? – Alasdair