0
我有一個奇怪的情況:DJANGO backend.authenticate(* ARGS,**憑證)返回無
我有一個自定義的用戶模型,連接到一個註冊表格,我做set_password(密碼)在將其保存到數據庫之前,它會使用argon2進行哈希處理,並將其正確保存到數據庫中。我檢查了。
check_password(password)在驗證用戶名和密碼時工作得很好。
但
auth.authenticate(username=username, password=password)
返回None。當Pycharm調試,我看到的用戶名和密碼得到正確傳遞,但它的失敗在這一點上:
backend.authenticate(*args, **credentials)
裸記住,我第一次從數據庫中獲取用戶是否在場,所以問題出在我猜測的密碼上,但無法弄清楚原因。另外, login(request, user)
也不工作。
沒有例外沒有什麼,他們都只是沒有返回。
任何人,爲了編碼的愛幫助我嗎?
下面的代碼:
形式:
class SignUpForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields['first_name'].widget.attrs['placeholder'] = 'first name'
self.fields['username'].widget.attrs['placeholder'] = 'username'
self.fields['email'].widget.attrs['placeholder'] = 'email'
password = forms.CharField(widget=forms.PasswordInput(attrs={
'placeholder': 'password'
}))
class Meta:
# points the form to the model to use
model = MyUser
fields = [
'first_name',
'username',
'email',
]
def save(self, commit=True):
user = super(SignUpForm, self).save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
user.save()
return user
在註冊視圖:
def signup(request):
context = {}
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('activate'))
else:
form = SignUpForm()
response = render(request, 'signup.html', context={'form': form})
return response
鑑於符號:
def signin(request):
form = SignInForm()
context = {
'form': form
}
if request.method == "POST":
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
if not get_or_none(MyUser, username=username):
context['user_not_found_message'] = 'Invalid Credentials - username'
else:
user = authenticate(username=username, password=password)
login(request, user)
if not user:
context['user_not_found_message'] = 'Invalid Credentials - password'
elif not user.is_active:
return HttpResponseRedirect(reverse('activate'))
else:
return HttpResponseRedirect(reverse('landingpage'))
response = render(request, 'signin.html', context=context)
return response
get_or_none是一個方法我創建和工作只是fin e,並返回正確的用戶。我做user.password它給了我散列通行證。
你確實需要真正顯示該代碼。 –
@DanielRoseman完成了 –