“未提供身份验证详细信息。” Django jwt

huangapple go评论107阅读模式
英文:

"Authentication details were not provided." Django jwt

问题

  1. 我为获取用户配置文件的详细信息创建了一个视图
  2. user_views.py
  3. @api_view(['GET'])
  4. @permission_classes([IsAuthenticated])
  5. def getUserProfile(request):
  6. user = request.user
  7. serializer = UserSerializer(user, many=False)
  8. return Response(serializer.data)

urls.py

  1. urlpatterns = [
  2. path("/users/profile/", uv.getUserProfile, name="get-user-profile")
  3. ]

serializers.py

  1. class UserSerializer(serializers.ModelSerializer):
  2. name = serializers.SerializerMethodField(read_only=True)
  3. isAdmin = serializers.SerializerMethodField(read_only=True)
  4. class Meta:
  5. model = User
  6. fields = ['id', 'username', 'email', 'name', 'isAdmin']
  7. def get_id(self, obj):
  8. return obj.id
  9. def get_isAdmin(self, obj):
  10. return obj.is_staff
  11. def get_name(self, obj):
  12. name = obj.first_name
  13. if name == '':
  14. name = obj.email
  15. return name
  16. class UserSerializerWithToken(UserSerializer):
  17. token = serializers.SerializerMethodField(read_only=True)
  18. class Meta:
  19. model = User
  20. fields = ['id', 'username', 'email', 'name', 'isAdmin', 'token']
  21. def get_token(self, obj):
  22. token = RefreshToken.for_user(obj)
  23. return str(token.access_token)

通过Postman发送了带有 Bearer <token> 授权标头的 GET 请求,并获得了以下响应:

  1. {
  2. "detail": "未提供身份验证详细信息。"
  3. }

使用了 django-rest-frameworkdjango-rest-framework-simplejwt

  1. <details>
  2. <summary>英文:</summary>
  3. I&#39;ve created a view for getting details of the user&#39;s profile.
  4. user_views.py
  5. ```py
  6. @api_view([&#39;GET&#39;])
  7. @permission_classes([IsAuthenticated])
  8. def&#160;getUserProfile(request):
  9. &#160;&#160;&#160;user&#160;=&#160;request.user
  10. &#160;&#160;&#160;&#160;serializer&#160;=&#160;UserSerializer(user,&#160;many=False)
  11. &#160;&#160;&#160;return&#160;Response(serializer.data)

urls.py

  1. urlpatterns = [
  2. path(&quot;/users/profile/&quot;, uv.getUserProfile, name=&quot;get-user-profile&quot;)
  3. ]

serializers.py

  1. class&#160;UserSerializer(serializers.ModelSerializer):
  2. &#160;&#160;&#160;&#160;name&#160;=&#160;serializers.SerializerMethodField(read_only=True)
  3. &#160;&#160;&#160;&#160;isAdmin&#160;=&#160;serializers.SerializerMethodField(read_only=True)
  4. &#160;&#160;&#160;&#160;class&#160;Meta:
  5. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;model&#160;=&#160;User
  6. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fields&#160;=&#160;[&#39;id&#39;,&#160;&#39;username&#39;,&#160;&#39;email&#39;,&#160;&#39;name&#39;,&#160;&#39;isAdmin&#39;]
  7. &#160;&#160;&#160;&#160;def&#160;get_id(self,&#160;obj):
  8. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;obj.id
  9. &#160;&#160;&#160;&#160;def&#160;get_isAdmin(self,&#160;obj):
  10. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;obj.is_staff
  11. &#160;&#160;&#160;&#160;def&#160;get_name(self,&#160;obj):
  12. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;name&#160;=&#160;obj.first_name
  13. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;name&#160;==&#160;&#39;&#39;:
  14. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;name&#160;=&#160;obj.email
  15. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;name
  16. class&#160;UserSerializerWithToken(UserSerializer):
  17. &#160;&#160;&#160;&#160;token&#160;=&#160;serializers.SerializerMethodField(read_only=True)
  18. &#160;&#160;&#160;&#160;class&#160;Meta:
  19. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;model&#160;=&#160;User
  20. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fields&#160;=&#160;[&#39;id&#39;,&#160;&#39;username&#39;,&#160;&#39;email&#39;,&#160;&#39;name&#39;,&#160;&#39;isAdmin&#39;,&#160;&#39;token&#39;]
  21. &#160;&#160;&#160;&#160;def&#160;get_token(self,&#160;obj):
  22. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;token&#160;=&#160;RefreshToken.for_user(obj)
  23. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;str(token.access_token)

I'm sending a get request through post man and sending a authorization header with Bearer &lt;token&gt;. And got

  1. {
  2. &quot;detail&quot;: &quot;Authentication details were not provided.&quot;
  3. }

Using django-rest-framework and django-rest-framework-simplejwt.

答案1

得分: 0

Figured it out like after a bit. Needed to add

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_AUTHENTICATION_CLASSES': [
  3. 'rest_framework_simplejwt.authentication.JWTAuthentication',
  4. ],
  5. }

to settings.py

英文:

Figured it out like after a bit. Needed to add

  1. REST_FRAMEWORK = {
  2. &#39;DEFAULT_AUTHENTICATION_CLASSES&#39;: [
  3. &#39;rest_framework_simplejwt.authentication.JWTAuthentication&#39;,
  4. ],
  5. }

to settings.py

huangapple
  • 本文由 发表于 2023年2月18日 18:32:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/75492724.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定