0

Оба пакета JWT, написанные для Django, дали мне проблемы с плохой документацией, поэтому я попробую пакет DRF-auth_token. Это хороший пример, который я последовал, Django Rest Framework Token Authentication. Вы должны теоретически быть в состоянии пойти вDRF auth_token: "non_field_errors": ["Не удалось войти в систему с предоставленными учетными данными."

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'), 

] 

Получение маркера для пользователей не работает, поэтому я переписал его себе, чтобы сделать его работу:

@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) 

Моя версия работает:

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

auth_token DRF не работает:

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', 
    ) 
} 

Кажется настроена правильно. Каждый пользователь в моей БД имеет токен. Каждый пользователь имеет is_authenticated и is_active в БД. Супер пользователи могут получить маркер:

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

по какой-то причине, только супер пользователь может получить маркер:

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

Почему не мои пользователи войти в систему и получить их фишку? Спасибо

ответ

2

Я пошел дальше и сделал это с drf token auth docs и не столкнулся с проблемами с суперпользователями, сотрудниками или обычными пользователями.

Также попробуйте выполнить шаги официальных документов вместо этого SO-ответа и посмотреть, устраняет ли это проблему - возможно, что-то изменилось.

Здесь были общие шаги, которые я взял:

  • установить Джанго ФПИ
  • пут 'rest_framework' и 'rest_framework.authtoken' в INSTALLED_APPS
  • добавить 'TokenAuthentication' в моих настройках rest_framework
  • run migrate
  • создавать токены для пользователей (я только что сделал это в urls.py)
  • создать URL-адрес для токена
  • POST http://localhost:8000/token/ { «имя пользователя»: «...„ „пароль“:“...»}

Если у вас есть код общественности в любом месте я был бы рад сделать дальнейший вид и посмотрим, что я нахожу.

+0

да, спасибо [email protected]: codyc54321/stack_overflow_nyble_copy.git – codyc4321

+0

Я попробовал ваш код и получил 'django.db.utils.OperationalError: нет такой таблицы: не auth_user' – codyc4321

+0

миграции разве работает – codyc4321