2016-06-23 10 views
1

私は、JWTと通常のトークン認証の混乱を、django_rest_authdjango_rest_frameworkに解決してくれることを願っています。JWTトークンはDRFトークンと同じテーブルに格納されていますか?

私はJWT (REST_USE_JWT = True)でdjango_rest_authを使用しています。私はrest_auth.registrationのビューとrest_authのビューを使用しており、デフォルトの認証クラスを'rest_framework_jwt.authentication.JSONWebTokenAuthentication'に設定しています。

私はrest_authからのURLを含め、次のURLを設定しましたurl(r'^api-token-auth/', obtain_jwt_token)rest_framework_jwtから。

私は新しいユーザーを登録すると、私は実行するrest_auth RegisterViewから、次のコードを期待:

if getattr(settings, 'REST_USE_JWT', False): 
    self.token = jwt_encode(self.user) 

をしかし、DjangoのAdminで、私は「トークン」、認証トークンテーブルがあることがわかりDjangoに組み込まれているトークン認証を使用していた場合、通常のトークンのようなトークンが表示されます。実際、/ rest-auth/loginエンドポイントに行くと、同じトークンを返します。 {"key":"6b705cbab083833c38414d4c6e4970c0abbb0c9f"}。私は、このユーザのためのAPIトークン-AUTH /エンドポイントに行くときしかし、私は、JWTトークンを取得:{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvYmVydEByb2JlcnRjaHUuY28udWsiLCJleHAiOjE0NjY2ODI5MjcsInVzZXJfaWQiOjIsInVzZXJuYW1lIjoicm9iZXJ0QHJvYmVydGNodS5jby51ayJ9.IvJIQBY95TrQp3V483GVdpV0fQKedMk9hWEFytMRidU"}

は、これらのキーとトークンの交換はありますか?同じユーザーのためにtokenaを両方使用できますか?確かに、保護されたエンドポイントにアクセスするためのトークンオプションは1つだけ必要ですか?

ありがとうございました。

答えて

1

hereおよびhereを参照してください。 JWTは、drfトークンのメリットの1つである場所に格納されるはずではありません。リクエストごとにdbにヒットしません。また、JWTのみを認証に使用する場合は、トークン認証用のエンドポイント(drfに付属のもの)を取り除く必要があります。

+0

JWTフラグをTrueに設定したとき、私のフォローアップの質問はなぜ 'django_rest_auth'で作成されたのでしょうか?または、私のセットアップが正しくないですか? – RobChooses

+0

私が覚えている限り、あなたの 'settings.INSTALLED_APPS'から' rest_framework.authtoken'を削除しなければならないし、JWTに切り替える前にdrfの 'ObtainAuthToken'ビューを使用していれば、単にToken.objects.get_or_create( user = user)トークンはデータベースに残ります。 –

+1

http://getblimp.github.io/django-rest-framework-jwt/設定例 - 複数の認証クラスを設定できます。 JWTの認証だけをしたい場合は、 'DEFAULT_AUTHENTICATION_CLASSES'に残してください –

関連する問題