Djangoで他のユーザーに成り代わる機能を提供するdjango-hijackを試す

ウェブサービスの運営で、「特定のユーザーでログインして画面の動作を試す」ことをしたい場合、django-hijackというパッケージで簡単に実現できます。 試したバージョンは、Python 3.10, Django 3.2, django-hijack 3.1.2 です。

ドキュメント

django-hijack 2.x系のドキュメントはReadTheDocsでホストされていますが、3.x系のドキュメントはGitHubのdocsディレクトリを参照とのことでした。

django-hijack/index.md at master · django-hijack/django-hijack · GitHub

djanog-hijackの導入

2.x系はコア機能のdjango-hijackと、管理画面の拡張機能django-hijack-adminの2つのPyPIのパッケージに別れていましたが、3.xではdjango-hijackパッケージのみに統合されたようです。

インストールは django-hijack のパッケージのみでokでした。

pip install django-hijack

ドキュメントにある通り、Djangosettings.py を編集し、 INSTALLED_APPSMIDDLEWARE を設定します。

# settings.py
INSTALLED_APPS = [
    '…',
    'hijack',
    'hijack.contrib.admin',  # Django Adminの統合機能を使う場合
]

MIDDLEWARE = [
    '…',
    'hijack.middleware.HijackUserMiddleware',
]

別ユーザーに成り代わる機能を提供するViewが必要なので、 urls.pydjango-hijackのエンドポイントをincludeします。

# urls.py
from django.urls import include, path


urlpatterns = [
    path('hijack/', include('hijack.urls')),
    # …
]

これで管理画面のユーザー一覧に「HIJACK」というボタンが表示されます。ボタンを押すとユーザーに成り代わります。

f:id:nullpobug:20211123164720p:plain

以下はユーザー名を表示するだけの簡単なViewを作ってテストした画面です。画面下部のメッセージはdjango-hijackが自動で挿入したものになります。

f:id:nullpobug:20211123164735p:plain

カスタムのユーザーモデルを利用していて、Adminを独自で拡張している場合は、 hijack.contrib.admin.admin モジュールにある HijackUserAdminMixin を利用する必要があるかもしれません。

デフォルトではHIJACKボタンを押せるユーザーは、管理者(is_superusertrue)のみです。 settings.HIJACK_PERMISSION_CHECK で権限のチェックをカスタマイズできます。

参考

blog.hirokiky.org