1

私はObtainJSONWebTokenを継承し、JSONWebTokenAPIViewのpostメソッドをオーバーライドしようとしていますが、APIをヒットするたびにエラーがスローされます:Forbidden (CSRFトークンが見つからないか間違っています。): /myurl/

ビュー.py

from rest_framework_jwt.views import ObtainJSONWebToken

class LoginDrfJwtView(ObtainJSONWebToken):
    def post(self, request, *args, **kwargs):
        response = super(ObtainJSONWebToken, self).post(request, *args, **kwargs)
        if condition == True:
            # my code
        return True

設定.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

JWT_AUTH = {
    'JWT_AUTH_HEADER_PREFIX': 'JWT',
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300)
}

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('login-jwt-over/', views.LoginDrfJwtView),

]
4

1 に答える 1

0

CSRF チェックをバイパスするこのクラスベースのビューに認証クラスを追加します。CSRF エラーは、認証クラスが定義されていないビューで発生します。

SessionAuthentication から継承し、常に返す認証クラスを作成する必要があります。次のようなものです。

from rest_framework.authentication import SessionAuthentication

class CsrfExemptAuth(SessionAuthentication):

    def bypass_csrf(self, request):

        return

次に、ビューで authentication_classes に追加します。

authentication_classes = (CsrfExemptAuth,)

于 2019-08-09T13:19:48.120 に答える