0

Les deux paquets JWT écrits pour Django m'ont donné des problèmes avec une documentation médiocre, donc j'essaye le paquetage DRF-auth_token. C'est un bon exemple que j'ai suivi, Django Rest Framework Token Authentication. Vous devriez théoriquement être en mesure d'aller àDRF auth_token: "non_field_errors": ["Impossible de se connecter avec les informations d'identification fournies."

localhost:8000/api-token-auth/

urls.py:

from django.conf.urls import url, include 
from django.contrib import admin 
from django.contrib.auth.models import User 
from rest_framework.authtoken import views 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^api/', include('api.urls', namespace='api')), 
    url(r'^orders/', include('orders.urls', namespace='orders')), 
    url(r'^api-token-auth/', views.obtain_auth_token, name='auth-token'), 

] 

Obtenir un jeton pour les utilisateurs ne fonctionne pas si je l'ai réécrite moi-même pour le faire fonctionner:

@api_view(['POST']) 
def customer_login(request): 
    """ 
    Try to login a customer (food orderer) 
    """ 
    data = request.data 

    try: 
     username = data['username'] 
     password = data['password'] 
    except: 
     return Response(status=status.HTTP_400_BAD_REQUEST) 

    try: 
     user = User.objects.get(username=username, password=password) 
    except: 
     return Response(status=status.HTTP_401_UNAUTHORIZED) 

    try: 
     user_token = user.auth_token.key 
    except: 
     user_token = Token.objects.create(user=user) 

    data = {'token': user_token} 
    return Response(data=data, status=status.HTTP_200_OK) 

Ma version fonctionne:

http://localhost:8000/api/login/customer-login/ 
{"username": "[email protected]", "password": "wombat"} 
--> 
{ 
    "token": "292192b101153b7ced74dd52deb6b3df22ef2c74" 
} 

Le auth_token DRF ne fonctionne pas:

http://localhost:8000/api-token-auth/ 
{"username": "[email protected]", "password": "wombat"} 
--> 
{ 
    "non_field_errors": [ 
    "Unable to log in with provided credentials." 
    ] 
} 

settings.py

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

    # third party: 
    'django_extensions', 
    'rest_framework', 
    'rest_framework.authtoken', 



REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.TokenAuthentication', 
    ) 
} 

Il semble configuré correctement. Chaque utilisateur de ma base de données possède un jeton. Chaque utilisateur est is_authenticated et is_active dans DB. Les super-utilisateurs peuvent obtenir leur jeton:

localhost:8000/api-token-auth/ 
{"username": "mysuperuser", "password": "superuserpassword"} 
--> 
{ 
    "token": "9297ff1f44dbc6caea67bea534f6f7590d2161b0" 
} 

pour une raison quelconque, seul super-utilisateur peut obtenir un jeton:

localhost:8000/api-token-auth/ 
{"username": "regularguy", "password": "password"} 
--> 
{ 
    "non_field_errors": [ 
    "Unable to log in with provided credentials." 
    ] 
} 

Pourquoi ne pas que mes utilisateurs peuvent se connecter et obtenir leur jeton? Merci

Répondre

2

Je suis allé de l'avant et a fait cela à partir du drf token auth docs et n'a pas rencontré de problèmes avec les superutilisateurs, les employés du personnel, ou les utilisateurs normaux.

Essayez également de suivre les étapes des documents officiels au lieu de la réponse SO et de voir si cela résout le problème - il est possible que quelque chose ait changé.

Voici les étapes générales étaient je saisirent

  • installer django, DRF
  • put 'rest_framework' et 'rest_framework.authtoken' dans INSTALLED_APPS
  • add 'TokenAuthentication' dans mes paramètres de rest_framework
  • run migrate
  • créer des jetons pour les utilisateurs (je viens de le faire dans urls.py)
  • créer l'URL pour jeton
  • POST http://localhost:8000/token/ { "nom d'utilisateur": "... " "mot de passe":" ..."}

Si vous avez le public de code partout où je serais heureux de prendre un autre regard et vois ce que je trouve.

+0

oui, merci [email protected]: codyc54321/stack_overflow_nyble_copy.git – codyc4321

+0

J'ai essayé votre code et obtenu 'django.db.utils.OperationalError: pas de table: auth_user' – codyc4321

+0

migration isnt travail – codyc4321