ユーザーが username 経由でのみログインできるようにするフォームがあります。ユーザー名ではなく、電子メール経由でのログインのみを許可することにしました。
まず、これは電子メールによるログ記録に関連する質問の重複ではありません。私のシナリオでは、ユーザーforms.py
がビューで最終ログインに進む前にユーザーを検証して認証するため、ログイン パスワードが正しくない場合にエラーが発生する可能性があるからです。等
私が直面している問題はforms.py
、メールが存在しない場合にエラーを発生させるように変更しましたが、ユーザーは自分のメール経由でログインできません。
def LoginRequest(request):
form = LoginForm(request.POST or None)
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return HttpResponseRedirect(reverse('Hello'))
return render(request, 'login.html',{'form': form})
これは、ユーザーがユーザー名を介してのみログインできるようにする私のオリジナルのコードです
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(
widget=forms.PasswordInput(render_value=False)
)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if not user or not user.is_active:
raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
これは、ユーザーが電子メール経由でのみログインできるように修正したコードです。どうしようかといろいろ考えましたが、これが一番いい案です。すみません、少し混乱しています。問題は、ユーザーがログインできないことです。理由がわかりません。
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(
widget=forms.PasswordInput(render_value=False)
)
def clean(self):
user = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if User.objects.filter(email=user).exists():
password = self.cleaned_data.get('password')
user = authenticate(username=user.username, password=password)
if not user or not user.is_active:
raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
誰か助けてくれませんか?