「AbstractBaseUser」を継承しログイン機能を実装しています。
下記の通り実装したのですが、
登録したユーザのパスワード認証が成功せず
ログインできない状態となっております。
DBのレコードを確認したのですが、
ユーザ名と暗号化されたパスワードは確認できましたので
ユーザ登録はうまく行っているのではと推測しております。
お心あたりのあるかたがいらっしゃいましたら、
ご教示頂けますと幸いです。
環境
- Mac OS X 10.13.6
- Python 3.6.1
- django 2.0.5
- sqlite3 2.6.0
作業内容
- models.pyでカスタムユーザ(CustomUser)を定義
from django.db import models from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth import models as auth_models from django.contrib.auth.validators import ASCIIUsernameValidator class CustomUser(AbstractBaseUser, auth_models.PermissionsMixin): username_validator = ASCIIUsernameValidator() """カスタムユーザーモデル.""" class Meta: db_table = 'custom_user' username = models.CharField(max_length=10, unique=True) email = models.EmailField(unique=False) first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=150, blank=True) USERNAME_FIELD = 'username' REQUIRED_FIELDS = ['email'] # Default Permission is_staff = models.BooleanField(default=False) is_admin = models.BooleanField(default=False) is_active = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) objects = auth_models.UserManager()
- form.pyにログインフォームとユーザ登録フォームを定義
from django import forms from . import models from django.contrib.auth import forms as auth_forms # class LoginForm(forms.ModelForm): class LoginForm(auth_forms.AuthenticationForm): class Meta: model = models.CustomUser fields = ( "username", "password" ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['username'].widget.attrs['class'] = 'form-control' self.fields['username'].widget.attrs['placeholder'] = 'ユーザ名' self.fields['password'].widget.attrs['class'] = 'form-control' self.fields['password'].widget.attrs['placeholder'] = 'パスワード' #ユーザ登録フォーム class RegisterForm(auth_forms.UserCreationForm): class Meta: model = models.CustomUser fields = ( "username","password1", "password2", ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['username'].widget.attrs['class'] = 'form-control' self.fields['username'].widget.attrs['placeholder'] = 'ユーザ名' self.fields['password1'].widget.attrs['class'] = 'form-control' self.fields['password1'].widget.attrs['placeholder'] = 'パスワード' self.fields['password2'].widget.attrs['class'] = 'form-control' self.fields['password2'].widget.attrs['placeholder'] = 'パスワード(確認)'
- view.pyでユーザ登録とログインのviewを定義
#ログイン class LoginView(auth_views.LoginView): template_name='login.html' form_class = forms.LoginForm #ユーザ登録 class RegisterView(generic.CreateView): template_name = 'register.html' form_class = forms.RegisterForm success_url = reverse_lazy('user_auth:index')
- setting.pyに以下内容を追記
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ) AUTH_USER_MODEL='user_auth.CustomUser'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。