マイアカウントビューの作成
シリアライザ
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>"}
上記のように表示されれば成功です。
参考
- 横瀬明仁,『現場で使える Django の教科書《基礎編》』,2018.
- 4.3.3 モデルオブジェクトを dict に変換する