0

Django 용으로 작성된 JWT 패키지는 모두 설명서가 좋지 않아서 나에게 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" 
} 

DRF의 AUTH_TOKEN이 작동하지 않습니다 : 그것은 올바르게 설정 보인다

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

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

settings.py. 내 DB에있는 모든 사용자는 토큰을가집니다. 각 사용자는 DB에 is_authenticatedis_active입니다. 슈퍼 사용자가 자신의 토큰을 얻을 수 있습니다 :

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

왜 내 사용자가 로그인하여 자신의 토큰을 얻을 수 없습니다 어떤 이유로

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

를 만 슈퍼 사용자는 토큰을받을 수 있나요? 고마워요

답변

2

나는 drf token auth docs에서이 작업을 수행했으며 슈퍼 유저, 스태프 유저 또는 일반 사용자에게 문제가 없었습니다.

또한 SO 답 대신 공식 문서의 단계를 따르고 문제가 해결되는지 확인하십시오. 변경된 사항이있을 수 있습니다.

  • 넣어 'rest_framework'DRF,

    • 장고를 설치하고 내 rest_framework 설정
    • 을에 INSTALLED_APPS에
    • 추가 'TokenAuthentication'을 'rest_framework.authtoken'

      여기

      내가했다 일반적인 단계이었다
    • 실행 마이그레이션
    • 사용자를위한 토큰 만들기 (단지 urls.py에서이 작업을 수행했습니다)
    • 토큰에 대한 URL을 만듭니다
    • POST http://localhost:8000/token/ { "이름": "...", "비밀번호": "..."}이 코드를 공개하는 경우

    어디서든 내가 더 살펴 기꺼이 것 및 내가 찾은 것을 보아라.

  • +0

    예, 당신에게 [email protected] 감사합니다 : codyc54321/stack_overflow_nyble_copy.git – codyc4321

    +0

    나는 코드를 시도하고 django.db.utils.OperationalError'가지고 : 그런 테이블 : 당신이 할 수 있었다 – codyc4321

    +0

    을 auth_user' 없습니다 이게 효과가 있니?나는 같은 문제에 직면하게된다. – codyc4321

    관련 문제