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": "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答えの代わりに公式ドキュメントの手順に従って、問題が修正されているかどうかを確認してください。変更された可能性があります。ここで

私が撮った一般的な手順だった:

  • ジャンゴをインストールし、
  • DRFプット '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ました:いいえ、そのようなテーブル: – codyc4321

+0

移行ありえないがにあなたができましたこれを稼働させる?私は同じ問題に直面することが起こります。 – codyc4321

関連する問題