1

私はバックエンドにdjango restingフレームワークを使用しており、フロントエンドに反応します。クライアントにログインする際に、完全に認証された後にJSONトークンを受け取るように、フロントエンドを設定しました。しかし、私のバックエンド、特にAPIはこのJSONトークンを受け取っていません。 homeviews.home、私のAPI(stocks_api、accounts_api、およびgroups_api)はR '^' 内にネストされていないので、私は問題のように感じる私のドメインのすべての部分がローカルストレージにアクセスできるようにJWTをローカルストレージに保存するにはどうすればよいですか?

router = SimpleRouter() 
router.register(r'accounts', accountsviews.UserViewSet, 'list') 
router.register(r'groups', accountsviews.GroupViewSet) 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^message/', homeviews.message, name="message"), 
    url(r'^stocks_api/', stocksviews.StockList.as_view()),  
    url(r'^passwordreset/', homeviews.passwordreset.as_view(), name='passwordreset'), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^api-token-auth/', obtain_jwt_token), 
    url(r'^api-token-refresh/', refresh_jwt_token), 
    url(r'^api-token-verify/', verify_jwt_token), 
    url(r'^reset/done/$', passwordviews.reset_done, name='password_reset_done'), 
    url(r'^reset/(?P<token>[\w:-]+)/$', passwordviews.reset, 
     name='password_reset_reset'), 
    url(r'^', include(router.urls)), 
    url(r'^', homeviews.home, name='home'), 
] 

urlpatterns = format_suffix_patterns(urlpatterns) 

次のようになります。ここでは

は私のURL confには、次のようになります。もしそうなら、私はどのようにURLを特定するだけではなく、JWTをグローバルにするのでしょうか?

答えて

0

そのクッキーがドメイン全体にアクセスできるようにするためにあなたはおそらく、あなたが「/」へのパスを設定する必要があり、クライアント上のクッキーにJWTトークンを保存しています。 JavaScriptの場合は、document.cookie = "jwt_token=yourtokenhashhere;path=/;domain=yourdomain.com";のようなものです。 djangoがクッキーを設定する方法はわかりませんが、これは似たようなものです。トークンをクライアントに送信するコードの部分を検索し、トークンクッキーのパスを/に設定してください。

+0

ので、これは、クライアント上でJWTトークンを保存するための私のコードは次のとおりです。 localStorage.setItem(「JWT」、JWT)あなたが一緒にトークンを渡す必要があり – PeepingHog

+0

それを必要とするすべての要求。したがって、認証が必要な新しいリクエストを作成するときは、ローカルトークンをヘッダ、POSTまたはGETパラメータに追加するだけです。それをサーバーで読み取って確認します。トークンは、クッキーに格納されていない場合は渡されません。 – Iansen

+0

jwtがクッキーとして保存されるように設定しました。今はapiページに表示されています。質問は、jwtを使用して私のAPIの認証を設定する場合、どうすればいいのですか?私がDRF用に設定したデフォルトの認証クラスは 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'です。クッキーをデコードしてJWTをデコードするカスタムのものを作る必要がありますか? – PeepingHog

0

あなたのクライアントは、ローカルストレージにJWTトークンを格納しているため、ユーザはrequest.user.is_authenicated経由authenticatedであれば、Djangoはのみ知ることができます。あなたはfront end内のすべてのリクエストはその後、Djangoのメタフィールド経由でアクセスのヘッダにあなたのJWTを含めることができます。 request.META['JWT']欠点は、すべてのリクエストに含まれる必要があることです。

また、あなたはクッキーにJWTを保存することができます。ユーザーが正常に認証され、jwtトークンを生成した後、そのjwtトークンを返す前にセッションに格納するように、認証コードを変更する必要があります。 request.session['jwt_token']は、アプリ全体の任意のビューでトークンにアクセスできます。

認証、擬似コードを表示

def obtain_jwt_token(self, request): 
    jwt_token = jwt_authenticate(request.user, request.DATA['password']) 
    request.session['JWT'] = jwt_token 
    return (jwt_token) 
+0

jwtをセッションクッキーとして保存する必要がありますか?それは通常のクッキーになりますか?もしそうなら、私はjwtを通常のクッキーに格納するように設定した後、私のapiがこのjwtクッキーを認証するようにするにはどうすればいいですか?私のDRF認証クラスは 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'に設定されています。 – PeepingHog

関連する問題