- Google認証で作ったユーザーで管理ページにログインしたい!
このような方に向けて書きました。
Google認証でユーザー作成すると、次の理由でDjangoの管理サイトにログインできません。
- パスワードが未設定
- 権限がない
本記事では、Google認証で作成したユーザーで管理サイトにログインする方法をご紹介します。
Google認証後に管理画面にログインできない
冒頭でもお伝えした通り、原因は次の2つです。
- パスワードがない
- 権限がない
それぞれの対策方法をお伝えします。
パスワードを作成する
流れとしてはDjangoのシェルに入り、パスワードを設定します。
まずはコマンドラインから次のコマンドを実行して、Djangoのシェルに入りましょう。
python manage.py shell
この後のコマンドは一行ずつ入力して実行する、の繰り返しで行きます。
from django.contrib.auth import get_user_model
User = get_user_model()
# emailでユーザーを取得する場合
email = 'user@example.com' # ここに対象のメールアドレスを入力
user = User.objects.get(email=email)
# usernameでユーザーを取得する場合
username = 'username' # ここに対象のユーザー名を入力
user = User.objects.get(username=username)
# パスワードを設定
new_password = 'your_new_password' # ここに新しいパスワードを入力
user.set_password(new_password)
user.save()
最後のuser.save()
を実行した時点でパスワードが保存されます。
終わったら以下のコマンドでDjangoシェルから抜けましょう。
exit()
これで指定したユーザーにパスワードが設定されました。
管理画面にログインするための権限を設定する
Djangoの管理サイトにアクセスできない主な原因として次が考えられます。
- スーパーユーザーが正しく作成されていない
- スーパーユーザーのパスワードが設定されていない
以下の手順でスーパーユーザーを作成または修正してください。
パスワードの作成と同様、Djangoシェルに入ります。
python manage.py shell
続いて、以下のコマンドを順番に実行していってください。
from django.contrib.auth import get_user_model
User = get_user_model()
email = 'admin@example.com' # スーパーユーザーのメールアドレスに置き換えてください
admin_user = User.objects.get(email=email)
# 権限を付与
admin_user.is_staff = True
admin_user.is_superuser = True
admin_user.save()
最後に、次のコマンドでDjangoシェルから抜けましょう。
exit()
以上で設定したように、is_staffとis_superuserがTrueでないと管理サイトにアクセスできません。
正しく権限設定を行うことでログインできるようになるので、設定を確認してみてください。
それでも解決できなかったらこれをやろう
ブラウザのキャッシュをクリア
ブラウザのキャッシュやクッキーが問題を引き起こしている可能性があります。
以下のキーを押してスーパーリロードしましょう。
Command + Shift + R
または、別のブラウザやシークレットモードでログインをしてみてください。
デバッグ情報の確認
本番モードにしていたら、デバッグモードにするのも一つの方法です。
DEBUG = True
エラーログが問題解決の手がかりになる場合があります。
Djangoログの確認
Djangoのログに詳細なエラーメッセージが記録されていないか確認します。
特に、認証に失敗した理由が記録されている可能性があります。
まとめ
django-allauthのGoogle認証で作ったユーザーは、次の理由から管理サイトにログインができません。
- パスワードがない
- 権限がない
本記事ではユーザーにこれらの設定を加えるため、Djangoシェルでユーザー設定を進めていく方法を紹介しました。
普段はあまりDjangoシェルを使うことがないかとは思いますが、ぜひこの機会に使い方を覚えてみてください。
コメント