【Django REST Framework】JWTを使った「ユーザー認証機能」を作る。
2022/3/18
2022/3/18
Django REST Frameworkを使ったAPIを作る中で、ユーザーの新規追加やユーザー権限ごとのアクセス制限設定などをするために必要な「ユーザー認証機能」を作っていきたいと思います。
今回は、「JWT」を使ったユーザー認証機能を作る方法をメモしていきます。
目次
大まかな作業の流れ
- 必要なライブラリをインストールする
- settings.pyを編集する
- serializers.pyに「UserSerializerクラス」を追加する
- views.pyに「CreateUserViewクラス」を追加する
- urls.pyを編集する
- 操作に認証制限をかける
必要なライブラリをインストール
$ pip install django-cors-headers
$ pip install djangorestframework-simplejwt
$ pip install djoser
settingsの編集
from datetime import timedelta
INSTALLED_APPS = [
...,
'corsheaders', # 追加
'djoser', # 追加
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # 追加
...
]
# 追加
CORS_ORIGIN_WHITELIST = [
"http://localhost:8000",
]
# 追加
SIMPLE_JWT = {
'AUTH_HEADER_TYPES': ('JWT',),
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), # アクセストークンの賞味期限
}
# 追加
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated', # デフォルトのアクセス制限
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication', # 認証に「JWT」を利用する設定
],
}
serializers.pyに「UserSerializerクラス」
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
Meta:
model = User
fields = ('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True, 'required': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
views.pyに「CreateUserViewクラス」
from rest_framework import generics
from .serializers import UserSerializer
from rest_framework.permissions import AllowAny
class CreateUserView(generics.CreateAPIView):
serializer_class = UserSerializer
permission_classes = (AllowAny,)
urls.pyを編集する
from api.views import CreateUserView
urlpatterns = [
...,
path('register/', CreateUserView.as_view(), name='register'), # 追加
path('auth/', include('djoser.urls.jwt')), # 追加
]
viewにアクセス制限を設定する
class PostListView(generics.ListAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = (AllowAny,) # 誰でもアクセス可能
アクセス制限のある操作を利用する方法
- 登録ユーザーのアクセストークンを発行する
- アクセストークンを使ってAPIのリクエストをする
ユーザーのアクセストークンを発行する
「/auth/jwt/create」にusernameとpasswordをPOSTすると、アクセストークンとリフレッシュトークンが返ってきます。
アクセストークンを使ってAPIのリクエストをする
APIのリクエストヘッダに「Authorization: JWT_[発行したアクセストークン]」を入れてリクエストすると、このアクセストークンで認証をしてくれて通れば利用できる。
最近の記事
音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24
【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22
【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21
【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22
「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3
【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12