Tôi đã cố thêm xác thực vào API Rest của mình bằng Bộ công cụ OAuth. Tôi đến trang đăng nhập và nhập tên người dùng và mật khẩu của mình rồi chuyển hướng đến api của tôi. Sau đó tôi nhận được thông báo {"chi tiết": "Thông tin đăng nhập xác thực không được cung cấp."} Tôi đã thử xem xét điều này và hầu hết những người có vấn đề dường như đã bỏ sót thứ gì đó trong cài đặt Rest_Framework. Tôi không nghĩ rằng tôi có mặc dù.Django Rest Framework {"detail": "Chứng thực xác thực không được cung cấp."}
Heres mã của tôi:
Settings.py
LOGIN_REDIRECT_URL = '/api/users/'
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAdminUser',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
),
}
url.py
urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/login/$', auth_views.login, {'template_name': 'login.html'}),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'),
url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
url(r'^api/users/$', api.UserList.as_view()),
url(r'^api/users/(?P<pk>[0-9+]+)/$', api.UserDetail.as_view()),
)
api.py
@receiver(post_save, sender=User)
def init_new_user(sender, instance, signal, created, **kwargs):
if created:
Token.objects.create(user=instance)
class APIEndpoint(ProtectedResourceView):
def get(self, request, *args, **kwargs):
return HttpResponse('Protected with OAuth2!')
class UserViewSet(viewsets.ModelViewSet):
model = User
serializer_class = UserSerializer
def retrieve(self, request, pk=None):
if pk == 'me':
return Response(UserSerializer(request.user).data)
return super(UserViewSet, self).retrieve(request, pk)
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
làm bất kỳ giải pháp nào trong số này giúp ích: http://stackoverflow.com/questions/14877249/ – Fiver
Tôi đã xem xét những điều đó và vẫn không có may mắn. Điều duy nhất từ đó tôi đã không cố gắng là 'WSGIPassAuthorization On' như sự hiểu biết của tôi thats nếu bạn đang chạy trên một máy chủ Apache khi tôi chỉ chạy virtualenv. Nếu tôi sai, tôi không biết nơi để đặt 'WSGIPassAuthorization On' –
Bạn đúng, đó là tùy chọn cấu hình Apache cụ thể. Bạn có danh sách 'oauth2_provider' trong' INSTALLED_APPS' trong tệp cài đặt của mình không? – Fiver