Djoser を触ってみる
JWT を使ったアカウントの CRUD が出来るみたいなので触ってみます。
参考
- djoser を使った Django REST Framework での JWT 認証機能の実装
- DJOSER を使った DJANGO REST FRAMEWORK でのカスタムユーザーモデル認証機能の実装
エンドポイント
エンドポイントは以下の種類があるようです。
/users/
/users/me/
/users/confirm/
/users/resend_activation/
/users/set_password/
/users/reset_password/
/users/reset_password_confirm/
/users/set_username/
/users/reset_username/
/users/reset_username_confirm/
/token/login/ (Token Based Authentication)
/token/logout/ (Token Based Authentication)
/jwt/create/ (JSON Web Token Authentication)
/jwt/refresh/ (JSON Web Token Authentication)
/jwt/verify/ (JSON Web Token Authentication)
djoser を設定する
以下二つのライブラリをインストールする。
pip install -U djoser
pip install -U djangorestframework_simplejwt
以下を settings.py に追加する。
from datetime import timedelta
...
INSTALLED_APPS = [
...
'djoser',
'rest_framework',
...
]
SIMPLE_JWT = {
#トークンをJWTに設定する。
'AUTH_HEADER_TYPES':('JWT'),
#トークンの持続時間の設定をする。
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60)
}
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
urls.py にルーティングを追加する。
from django.contrib import admin
from django.urls import path, include
from . import views
app_name = "app"
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/',include('djoser.urls')),
path('api/auth/',include('djoser.urls.jwt')),
]
ユーザーアプリとモデルを作成する
カスタムユーザーを作成します。
ここは djoser と関係ないので適当に。。。
アプリを作成する。
django-admin startapp users
アプリを登録し認証のモデルに指定する。
INSTALLED_APPS = [
...
'users',
...
]
# アプリ名.モデル名
AUTH_USER_MODEL = 'users.User'
モデル models.py を定義する。
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
class Meta:
verbose_name_plural = 'User'
管理画面で見れるように admin.py に登録する。
from django.contrib import admin
from users.models import User
admin.site.register(User)
マイグレートする。
python manage.py makemigrations
python manage.py migrate
djoser を試してみる
ユーザーを適当につくる。
python manage.py createsuperuser
以下の URL にアクセスすると djoser の画面が表示される。
(ポートはサーバーが起動しているのに適宜変えて。)
http://localhost:8888/api/auth/
今度は、ユーザー情報を取得する為、以下の URL にアクセスしてみる。
http://localhost:8888/api/auth/users/
以下のように怒られる。
{
"detail": "認証情報が含まれていません。"
}
トークンを取得するために以下の URL にアクセスする。
http://localhost:8888/api/auth/jwt/create
- Username に先ほど作成した Admin のユーザー名を入力する。
- Password に先ほど作成した Admin のパスワードを入力する。
- POST を押す。
- 以下のようなトークンが取れたのを確認する。
{
"refresh": "aaabbbccc",
"access": "xxxyyyzzz"
}
ターミナルから以下のリクエストを送ると今度は、ユーザー情報が取得出来るのを確認する。
curl -LX GET http://127.0.0.1:8888/api/auth/users/ -H 'Authorization: JWT xxxyyyzzz'
ディスカッション
コメント一覧
まだ、コメントがありません