Ho provato ad aggiungere l'autenticazione alla mia API Rest utilizzando OAuth Toolkit. Raggiungo la pagina di accesso e inserisco il mio nome utente e la password, quindi reindirizzato alla mia API. Poi ho ricevuto un messaggio {"detail": "Le credenziali di autenticazione non sono state fornite."} Ho provato a esaminare questa e la maggior parte delle persone che hanno il problema sembrano aver perso qualcosa dalle impostazioni di Rest_Framework. Non penso di avere però.Django Rest Framework {"detail": "Le credenziali di autenticazione non sono state fornite."}
Heres il mio codice:
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
fare una di queste soluzioni aiuto: http://stackoverflow.com/questions/14877249/ – Fiver
Ho guardato quelli e ancora senza fortuna. L'unica cosa da cui non provavo era il 'WSGIPassAuthorization On' per quanto ne so, se si esegue su un server Apache quando sto semplicemente eseguendo solo virtualenv. Se ho torto, non so dove mettere il 'WSGIPassAuthorization On' –
Hai ragione, questa è un'opzione di configurazione specifica di Apache. Avete l'elenco di 'oauth2_provider' in' INSTALLED_APPS' nel file delle impostazioni? – Fiver