アプリ追加
python manage.py startapp accounts
settingsにアプリ追加
‘accounts.apps.AccountsConfig’,
accounts.models.pyに追加
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
“””拡張ユーザーモデル”””
class Meta:
verbose_name_plural = ‘CustomUser’
settings.pyに追加
AUTH_USER_MODEL = ‘accounts.CustomUser’
accounts/admin.pyに追加
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)
django-allauthをインストール
pip install django-allauth
マイグレーション
python manage.py makemigrations
python manage.py migrate
マイグレーションできない場合
以下のようなエラーがでる場合
conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError
settings.pyのdatabaseのdefaultをsqlite3に戻す
1 2 3 4 5 6 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } |
- Delete the DB(settings.pyのdatabaseのdefaultをsqlite3に戻す)
- Delete pycache and migrations from all the apps
- Make sure you have set AUTH_USER_MODEL
- Make migrations
settings.pyに追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'db.apps.DbConfig', 'django.contrib.postgres', 'accounts.apps.AccountsConfig', 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', ] |
更にsettings.pyに追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# django-allauthで利用するdjango.contrib.sitesを使うためにサイト識別用IDを設定 SITE_ID = 1 AUTHENTICATION_BACKENDS = ( 'allauth.account.auth_backends.AuthenticationBackend', # 一般ユーザー用(メールアドレス認証) 'django.contrib.auth.backends.ModelBackend', # 管理サイト用(ユーザー名認証) ) # メールアドレス認証に変更する設定 ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_USERNAME_REQUIRED = False # サインアップにメールアドレス確認を挟むよう設定 ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_REQUIRED = True # ログイン/ログアウト後の遷移先を設定 LOGIN_REDIRECT_URL = 'diary:index' ACCOUNT_LOGOUT_REDIRECT_URL = 'account_login' # ログアウトリンクのクリック一発でログアウトする設定 ACCOUNT_LOGOUT_ON_GET = True |
adminページにアクセスできない場合
adminページにアクセスすると以下のようなエラーが出る場合がある
リレーション “django_site”は存在しませんLINE 1:
… “django_site”。 “domain”、 “django_site”。 “name” FROM “django_si …
その際は以下のマイグレーションを行う ソース
1 2 |
./manage.py migrate sites ./manage.py migrate |
リレーションaccounts_customuserが存在しないエラー
マイグレーションすると「django.db.utils.ProgrammingError: リレーション”accounts_customuser”は存在しません」というエラーが出る場合は
python manage.py makemigrations accountsを実行して、それでも
エラーが出たら以下を実行
①settings.pyのINSTALLED_APPSの一番上の’django.contrib.admin’,をコメントアウト
②メインのurl.pyのurlpatternのpath(‘admin/’, admin.site.urls),をコメントアウト
③python manage.py makemigrations
④python manage.py migrate
ソース
マイグレーション時にprimary keyワーニング
マイグレーション時にaccount.EmailAddress: (models.W042) Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.という警告が出たらsettings.pyに
を入れて再度マイグレーションを行う
各種認証関連ページのテンプレートとメール定型文の場所
〇ローカルの場合
\Lib\site-packages\allauth\templates\account
〇AWSの場合
/home/app_admin/venv_ruling/lib/python3.7/site-packages/allauth/templates/account
URLは以下でアクセスできる(サインアップの例)
http://localhost:8000/accounts/signup/
ConnectionRefusedError at /accounts/login/が出たら
以下をsettings.pyに追加
EMAIL_BACKEND = ‘django.core.mail.backends.console.EmailBackend’
ACCOUNT_EMAIL_VERIFICATION = “none”