Django

Login認証がうまくいっていない💦(Total:13day45.5h)

ログイン認証が、スーパーユーザーのみログインができてそれ以外の権限だとエラーが発生する!

ログインできるスーパーユーザーとできないユーザー admin.siteの継承を忘れずに

ログインできるのがスーパーユーザーだけだということに気づいたのは、権限処理がうまくいっているか検証しようと思った時でした。
スーパーユーザーでリクエストしたらスケジュール作成は実行できるけど、それ以外の権限なら実行できないか確認しよっと

ごろう
権限の判断がちゃんとできてるか確認してみよっと

こんな気軽な気持ちでテストをしようとすると、

えー!なんで?正しいはずなのに全然ログインできん💦
これは、どういうことだ???

ログインできるユーザーとログインできないユーザーの違いを考える

ログインできるユーザーがあるのとログインできないユーザーががる。

メモ

  1. ログインできるユーザーがある
  2. ログインできないユーザーがある
  3. ログインできるユーザーは[python manage.py createsuperuser]で作成
  4. ログインできないユーザーは管理画面で作成

うーん、なんか違いはコマンドで作成したユーザーと管理が面で作成したユーザーかの差っぽい

パスワードがハッシュ化されていない!!!

管理画面であらためて、情報を確認してみると

ログインできるユーザー
ログインできないユーザー

あー、パスワードがハッシュ化されて保存されていない!これが原因かもしれない💦

Djangoの場合、通常パスワードはハッシュ化されていて、管理者画面でも見えないはずなのに…

DjangoでadminサイトにUserAdminを継承する

ポイント

admin.pyにサイトを登録するときに、UserAdminを継承するとハッシュ化される!

これだけのことでしたが、1時間ちょっと悩んでいました💦
さらにこれを書きながらやっているので、実質2時間弱かな…

from django.contrib import admin
from .models import *
from django.contrib.auth.admin import UserAdmin #追加
# Register your models here.
admin.site.register(User, UserAdmin)#追加
ごろう
やった!ハッシュ化してるときの表示!

このままログインしようとしてももともと登録した時のパスワードがハッシュ化されていないので、Passwordを変更し保存することでハッシュ化されます。

無事にログインできるようになりました!

-Django

© 2022 ごろう@縁紡ぐ