Tôi đang gặp phải sự cố với Xác thực/Chế độ xem đăng nhập của mình. Hệ thống này đã hoạt động trước nhưng gần đây tôi đã chuyển sang một máy chủ mới và không thể sửa nó.Khung Django Rest - Request.user luôn là AnonymousUser và request.POST rỗng
Khi cố gắng đăng nhập qua chế độ xem xác thực, request.user luôn là một Người dùng ẩn danh như thể tôi không nạp bất kỳ thông tin đăng nhập xác thực nào. Tôi đã thử đăng nhập request.POST nhưng nó có vẻ là một dict trống.
Tôi có một traceback đây:
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'
Ở đây tôi có quan điểm auth API được không:
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({})
bên dưới là lớp xác thực mà tôi đang sử dụng:
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
Nó không rõ ràng với tôi những gì bạn đang cố gắng làm. Thông thường, bạn sẽ sử dụng thông tin trong yêu cầu tìm nạp một người dùng, sau đó gọi 'login (request, user)' để đăng nhập chúng. Gọi 'login (request, request.user)' không có ý nghĩa - nếu 'request. user' không phải là vô danh, sẽ không cần phải đăng nhập chúng. – Alasdair
@Alasdair có vẻ như tôi không thể truy cập thông tin đăng nhập được gửi trong yêu cầu Ajax. như tôi đã nói request.POST dường như trống rỗng, request.user không chứa chúng, hoặc cũng không request.username hoặc request.password ví dụ đó là các khóa tôi đã gửi trong yêu cầu. –
Nội dung của 'request.body' là gì? – Alasdair