Sto utilizzando uno django-oneall per consentire l'autenticazione della sessione di accesso social sul mio sito. Sebbene non sia uno dei provider di autenticazione suggeriti per django-rest-framework, rest_framework.authentication.SessionAuthentication
utilizza l'autenticazione di sessione predefinita di django. quindi ho pensato che dovrebbe essere abbastanza semplice da integrare.django-rest-framework restituisce la risposta 403 su POST, PUT, DELETE nonostante le autorizzazioni AllowAny
Per quanto riguarda le autorizzazioni, in definitiva userò lo IsAdmin
, ma a fini di sviluppo, l'ho appena impostato su IsAuthenticated
. Quando ho restituito 403, ho rilasciato le autorizzazioni a AllowAny
, ma ancora nessun dado. Ecco il mio riposo config quadro:
settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
# 'rest_framework.permissions.IsAuthenticated',
# 'rest_framework.permissions.IsAdminUser',
),
'PAGE_SIZE': 100,
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
),
}
EDIT:
ho ottenuto questo lavoro basato sulla risposta qui sotto. Risulta che rest_framework
si aspetta sia il cookie csrftoken
sia un'intestazione X-CSRFToken
dello stesso valore, ho impostato il mio codice di front-end per inviare quell'intestazione per tutte le richieste ajax e tutto ha funzionato correttamente.
hmm ... il mio Ember app è infatti passa il cookie CSRF nella richiesta. Ho una configurazione proxy inverso in apache per il mio riposo API. Forse ho bisogno di modificare in qualche modo il mio proxy inverso in modo che copi il valore del cookie csrf nell'intestazione 'HTTP_X_CSRFTOKEN'? – ckot
Credo che dovrei piuttosto configurare ember per passare sempre il valore del cookie csrftoken nell'intestazione. dovrebbe essere più facile – ckot
@ckot Ho aggiornato la mia risposta. Hai dimenticato che l'intestazione 'X-CSRFToken' e il cookie' csrftoken' dovevano essere impostati. – chucksmash