2016-04-04 18 views
0

Dinlenme api kullanarak django sitesinde kimliği doğrulanan açısal bir uygulama yapıyorum. uygun olabilir iki farklı hata kodları vardır doğrulanmamış isteği izni verilmezDjango Rest Framework Kimlik Doğrulama Hataları

: DRF doc onlar şöyle bir inkar kullanıcı kimlik doğrulama, iki hata, HTTP 401 ve HTTP 403 sonuçlanacaktır belirtmektedirler .

  1. HTTP 401 Yetki
  2. HTTP 403 İzni bazı sahte verileri ile kimlik doğrulaması çalıştığınızda

Howenever, bunu bilerek yanlış, ben olsun hata yanıtı HTTP 400 ile engellendi non_field_errors. Burada sorun nedir?

Önce kullanıcı adı ve parola ile basit bir kimlik doğrulaması yapıyorum, bu da kullanıcı belirtecini almak için yapılmış, bu da sitenin diğer işlemlerinde gerekli olacak. Bir expering Yetkilendirme jetonu elde etmek için bir yöntem kullanıyorum

, aşağıya görebilirsiniz:

sınıf ObtainExperingAuthToken (ObtainAuthToken): def (öz, istek, * args, ** Kargs) gönderebilir: Seri hale = self.serializer_class (veri = request.data)

if serializer.is_valid(): 
     print serializer 
     user = UserProfile.objects.get(email=serializer.data['username']) 
     token, created = Token.objects.get_or_create(user=user) 

     utc_now = timezone.now() 
     if not created and token.created < utc_now - datetime.timedelta(hours=24): 
      token.delete() 
      print serializer.data 
      token = Token.objects.create(user=serializer.data['user']) 
      token.created = datetime.datetime.utcnow() 
      token.save() 

     groups = [group.name for group in user.groups.all()] 
     response_data = { 
      'email': user.email, 
      'token': token.key, 
      'groups': groups 
     } 

     return HttpResponse(json.dumps(response_data), content_type='application/json') 
    return HttpResponse(serializer.errors, status=400) 

@Edit değeri REST_FRAMEWORK

için

cevap

0

Öncelikle açıklamanızdan çok net olmasa da, sanırım kullanıcı erişim belirteci sağlamaktan sorumlu api'de 400 hata alıyorsunuz. Açıkçası, bu API'de (istemci kimlik doğrulaması hariç) hiçbir kimlik doğrulama olamayacağından, kendinizden bahsettiğiniz gibi geçersiz veriler sağladığınız için gerçekten hatalı bir istek hatası alıyorsunuz demektir. Doğrulama hatası, kimlik doğrulaması yapılmayan erişime izin vermeyen bir api'ye eriştiğinizde gerçekleşir; bu, kimlik doğrulama belirtecini gerçekten sağlayan api için geçerli olmamalıdır.

İkinci olarak Kimlik Doğrulama hatası almak için, Kimlik Doğrulama Sınıflarını REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] ya da görünüm sınıfının AUTHENTICATION_CLASSES değişkenine eklemeniz gerekir.

+0

Üzgünüz, bunu açıklığa kavuşturacağım. Ben kullanıcı erişim belirteci sağlamaz, ben arka uç ile erişim belirteci sağlamanız gereken bir son noktaya yanlış kullanıcı adı ve parola sağlayarak, kullanıcı verileri sağlayın. Yerine, bir Bad Request aldım ne yazık ki, Unathourized veya Forbbiden almak için bekliyordum. Soruyu "REST_FRAMEWORK" değerleri ile düzenleyeceğim. –