2016-02-24 8 views
9

TokenAuthentication'ı kurmak için DRF belgelerini takip ediyorum ve göz atılabilir API ile çalışmasını sağlayamıyorum.Django REST Framework: Browserable API ile TokenAuthentication'ı kullanma

REST_FRAMEWORK = { 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication', 
    ), 

INSTALLED_APPS = (
    ... 
'rest_framework', 
'rest_framework.authtoken', 
    ... 

yanı dokümanlardan kod parçası ile mevcut kullanıcılar için oluşturulan jeton olarak: Ben settings.py düzgün çizgiler ekledim inanıyoruz. authtoken_token tablosunu sorguladığımda her kullanıcı için jeton görebiliyorum, böylece var olduklarını biliyorum.

HTTP 401 Unauthorized 
Allow: GET, HEAD, OPTIONS 
Content-Type: application/json 
Vary: Accept 
WWW-Authenticate: Token 

{ 
"detail": "Authentication credentials were not provided." 
} 

Yani Token kimlik teşebbüs gibi görünüyor, ama bu ileti biraz garip: Ben göz atılabilir API giriş yapmaya

her şey, ben aşağıdaki içerik geri verilmesinde. Yanlış bir şifre girdiğimde, giriş formunda 'doğru şifre gir' mesajını alıyorum. Doğru şifreyi girdiğimde, giriş yapılıyormuş gibi görünüyor, ancak yukarıdaki iletiyle birlikte API köküne geçiyor ve kullanıcı adından ziyade üst menüde "Giriş Yap" ı görüntülüyor.

Bu, bir şekilde özel kullanıcı modelimle ilgili olabilir mi? Ya da, şu anda en iyi uygulama ya da aslında gerekli olup olmadığından emin olmasam da, DRT belgelerinin HTTPS'ye TokenAuthentication ile gereksinim duyduğunu söyleyen DHP desteklemeyen dev sunucusuyla geliştirdiğim gerçeğinden kaynaklanabilir .

cevap

11

Göz atılabilir api'yi TokenAuthentication ile kullanamazsınız. Eğer ayarlarda (http://www.django-rest-framework.org/api-guide/authentication/#sessionauthentication) için SessionAuthtication eklemek zorunda:

REST_FRAMEWORK = { 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication', 
    'rest_framework.authentication.SessionAuthentication', 
), 
+0

ben tahmin cevaplar teşekkür ederim ki-! – dkhaupt

+0

Bu yetkiyi eklerseniz, sunucumda istekte bulunan herkesin yalnızca kullanıcı adı ve parola ile erişeceği anlamına gelmez (belirteç olmadan), öyle değil mi? Sadece tahmin ettiğim web siteleri için çalışıyor, ama emin olmak istedim. –

+0

'Rest_framework.authentication.BasicAuthentication' bile amaca hizmet eder. Bunu tercih ederim çünkü ideal olarak SessionAuthentication sadece sunucu ve istemciniz django şablonları gibi aynı bağlamda çalıştığında kullanılmalıdır. @KutayDemireren - kullanıcı adı/parola ve uygun izni olan herkes API'lere erişebilir. Ancak, size API son noktasını yayınlamak için hazır değilsiniz. –