以下の内容はhttps://kamatimaru.hatenablog.com/entry/2025/01/20/012634より取得しました。


django-allauthでUserの保存処理をカスタマイズする

概要

実際のアプリケーションでdjango-allauthを使用する際には、User保存処理をカスタマイズしたくなると思うので、その方法を調べていく。

以下の記事の流れでKeycloakを使ったOIDC認証を前提とする。

kamatimaru.hatenablog.com

準備

Djangoの公式ドキュメントに従って、AbstractUserを継承してカスタムユーザーを定義する。

https://docs.djangoproject.com/en/4.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project

今回は検証用にjobというフィールドを追加してみる。

models.py

from django.contrib.auth.models import AbstractUser
from django.db import models


class AppUser(AbstractUser):
    job = models.CharField(max_length=100, blank=True)

settings.pyAUTH_USER_MODELを定義する。

settings.py

# 省略
AUTH_USER_MODEL = "app.AppUser"

Django AdminにAppUserを登録して登録したデータを確認できるようにする。

admin.py

from django.contrib import admin
from .models import AppUser

admin.site.register(AppUser)

Adapterのオーバーライド

django-allauthでUserの保存処理をカスタマイズする際にはAdapterというクラスをオーバーライドするらしい。

The adapter class allows you to override various functionality of the allauth.account app. To do so, point settings.ACCOUNT_ADAPTER to your own class that derives from DefaultAccountAdapter and override the behavior by altering the implementation of the methods according to your own needs.

docs.allauth.org

Keycloakではsocialaccountを使用しているので、以下のようにsettings.pyの定数名と継承するAdapterクラスが変わる。

  • settings.ACCOUNT_ADAPTERsettings.SOCIALACCOUNT_ADAPTER
  • allauth.account.adapter.DefaultAccountAdapterallauth.socialaccount.adapter.DefaultSocialAccountAdapter

https://docs.allauth.org/en/dev/socialaccount/configuration.html

カスタムAdapterの実装

以下のようにDefaultSocialAccountAdapterを継承したカスタムAdapterを実装する。

adapter.py

from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth.account.utils import user_field

class MySocialAccountAdapter(DefaultSocialAccountAdapter):
    def populate_user(self, request, sociallogin, data):
        user = super().populate_user(request, sociallogin, data)
        user_field(user, "job",  "プログラマ")
        return user

settings.pyで使用するAdapterを定義する。

settings.py

# 省略
SOCIALACCOUNT_ADAPTER = "app.adapter.MySocialAccountAdapter"
# 省略

動作確認

前回 と同じように、KeycloakでOIDC認証する。

Jobに「プログラマ」と保存されていることが確認できた。

今回はまずは固定文字列を保存してみたが、次はKeycloak側のユーザー属性にも追加してそれを動的に保存できるか検証してみたい。




以上の内容はhttps://kamatimaru.hatenablog.com/entry/2025/01/20/012634より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14