Q&A
permission_classes = [IsAuthenticatedOrReadOnly] のAPIを作成し、ターミナルからの以下のコマンドでJWTを取得しました。
curl -X POST http://xxx.xxx.xxx.xxx/api/v1/auth/jwt/create/ -H "Accept:application/json" -H "Content-type: application/json" -d '{"username": "admin","password": 12345}'
取得したアクセストークンを利用して、testuserを削除するコマンドを実行しました。
curl -v -X DELETE http://xxx.xxx.xxx.xxx/api/v1/accounts/testuser/ -H 'Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjY2OTE5MjE2LCJqdGkiOiJmNDNkMGVhNGIwYjM0ZmY3YjM2MmIwOTZlN2FmN2ViNiIsInVzZXJfaWQiOjF9.6EKlLtemKd2MAbSeb5d1uqWQfyxKvhoW1.........'
認証情報が含まれていません、という結果が出力されました。原因を解決したいと思っています。
* Trying xxx.xxx.xxx.xxx:80... * Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) port 80 (#0) > DELETE /api/v1/accounts/testuser/ HTTP/1.1 > Host: xxx.xxx.xxx.xxx > User-Agent: curl/7.82.0 > Accept: */* > Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjY2OTE5MjE2LCJqdGkiOiJmNDNkMGVhNGIwYjM0ZmY3YjM2MmIwOTZlN2FmN2ViNiIsInVzZXJfaWQiOjF9.6EKlLtemKd2MAbSeb5d1uqWQfyxKvhoW1......... > * Mark bundle as not supporting multiuse < HTTP/1.1 401 Unauthorized < Date: Fri, 28 Oct 2022 01:03:23 GMT < Server: Apache < WWW-Authenticate: JWT realm="api" < Vary: Accept,Origin < Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS < X-Frame-Options: DENY < Content-Length: 55 < X-Content-Type-Options: nosniff < Referrer-Policy: same-origin < Cross-Origin-Opener-Policy: same-origin < Content-Type: application/json < * Connection #0 to host xxx.xxx.xxx.xxx left intact {"detail":"認証情報が含まれていません。"}
これは、APIの作成方法に問題がある(認証情報を含んだAPIを作成できていない)ということでしょうか?
settings.pyのSIMPLE_JWTは以下のように設定しています。
SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=10), 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), 'ROTATE_REFRESH_TOKENS': True, 'BLACKLIST_AFTER_ROTATION': False, 'UPDATE_LAST_LOGIN': False, 'ALGORITHM': 'HS256', 'SIGNING_KEY': SECRET_KEY, 'VERIFYING_KEY': None, #'AUDIENCE': None, #'ISSUER': None, #'JWK_URL': None, #'LEEWAY': 0, 'AUTH_HEADER_TYPES': ('JWT',), #'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', #'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), 'TOKEN_TYPE_CLAIM': 'token_type', #'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser', #'JTI_CLAIM': 'jti', #'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', #'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), #'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), }
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。