View on GitHub

マイアカウントビューの作成

Home

マイアカウントビューの作成

シリアライザ

src/backend/api/accounts/serializers.py

......
# ↓追加
class MeSerializer(serializers.ModelSerializer):
    user_id = serializers.UUIDField(source="user.user_id", allow_null=True)
    user_email = serializers.SerializerMethodField()

    class Meta:
        model = CustomUser
        fields = (
            "id",         # Django auth のユーザID
            "user_id",    # online.usersテーブル側のID
            "user_email"  # 復号したemail
        )

    def get_user_email(self, obj):
        if obj.user is None:
            return None
        try:
            return obj.user.get_email()
        except Exception:
            return None
# ↑追加

ビュー

src/backend/api/accounts/views.py

from rest_framework.views import APIView
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.response import Response
from rest_framework import status

from .serializers import SignUpSerializer, SignInSerializer, SignOutSerializer, MeSerializer  # <- MeSerializerを追加
......
# ↓追加
class MeView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        serializer = MeSerializer(request.user)
        return Response(serializer.data, status=status.HTTP_200_OK)
# ↑追加

URL マッピング

src/backend/api/accounts/urls.py

from django.urls import path
from .views import SignUpView, SignInView, SignOutView, MeView  # <- MeViewを追加

urlpatterns = [
    path("signup/", SignUpView.as_view(), name="accounts-signup"),
    path("signin/", SignInView.as_view(), name="accounts-signin"),
    path("signout/", SignOutView.as_view(), name="accounts-signout"),
    path("me/", MeView.as_view(), name="accounts-me"),  # <- 追加
]

実行確認

サインインビューの作成の手順にしたがってサインインし、アクセストークンとリフレッシュトークンを取得してください。取得したトークンを用いて、バックエンドサーバが起動している状態で、下記コマンドを実行してください。

$ curl -X GET http://localhost:8000/api/accounts/me/ \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -d '{"refresh": "<REFRESH_TOKEN>"}'

{"id":1,"user_id":"<USER_ID>","user_email":"<EMAIL_ADDRESS>"}

上記のように表示されれば成功です。

参考

  1. 横瀬明仁,『現場で使える Django の教科書《基礎編》』,2018.
    • 4.3.3 モデルオブジェクトを dict に変換する