Sto seguendo i documenti DRF per configurare TokenAuthentication e non riesco a farlo funzionare con l'API sfogliabile. Credo di aver aggiunto le linee appropriate in settings.py
:Django REST Framework: utilizzo di TokenAuthentication con l'API navigabile
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
INSTALLED_APPS = (
...
'rest_framework',
'rest_framework.authtoken',
...
Così come i token generato per gli utenti esistenti con il frammento di codice dalla documentazione. Posso vedere i token per ciascun utente se interrogo la tabella authtoken_token
, quindi so che esistono.
Ogni volta che provo ad accedere al API sfogliabile, ottengo il seguente contenuto restituito:
HTTP 401 Unauthorized
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
WWW-Authenticate: Token
{
"detail": "Authentication credentials were not provided."
}
Così sembra essere il tentativo token di autenticazione, ma questo messaggio è un po 'strano. Quando inserisco una password errata, viene visualizzato il messaggio "inserisci una password corretta" nel modulo di accesso. Quando inserisco la password corretta, appare il login, ma mi porta alla radice dell'API con il messaggio precedente, e visualizza "Accedi" nel menu in alto, piuttosto che il nome utente.
Questo potrebbe essere correlato al mio modello utente personalizzato in qualche modo? Oppure potrebbe essere dovuto al fatto che attualmente sto sviluppando con il server di sviluppo, che non supporta https- i documenti DRF menzionano la necessità di HTTPS con TokenAuthentication, anche se non ero sicuro se fosse una best practice o effettivamente richiesta .
Credo che le risposte che- grazie! – dkhaupt
Se aggiungo questa autorizzazione, non significa che chiunque effettui una richiesta al mio server acceda solo con nome utente e password (come senza autenticazione token), vero? Credo che funzioni solo per i siti Web, ma volevo esserne sicuro. –
Anche 'rest_framework.authentication.BasicAuthentication' servirebbe allo scopo. Lo preferisco perché idealmente SessionAuthentication dovrebbe essere usato solo quando il tuo server e client sono eseguiti nello stesso contesto come i template di Django. @KutayDemireren: sì, chiunque abbia un nome utente/password e l'autorizzazione appropriata avrà accesso alle API. Ma sta a te pubblicare o meno l'endpoint dell'API. –