簡體   English   中英

用戶創建時沒有密碼 Django(用戶無法登錄)

[英]user created with no password Django (users can't log in)

我成功注冊用戶,但是當 ot 將我重定向到登錄頁面時,我 100% 確定密碼是正確的,但它沒有讓我登錄,所以我檢查了該特定用戶的管理頁面,用戶名存在,但它說密碼尚未創建。

這是我的意見.py

#from selectors import EpollSelector
from django.shortcuts import render, redirect
from django.contrib import messages
from django.http import HttpResponseRedirect
from .forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm
from django.contrib.auth.decorators import login_required
# Create your views here
 
def register(request):
    if request.method == "POST":
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get("username")
            messages.success(request, f'You are now able to log in!')
            return redirect('login')
    else:  
        form = UserRegisterForm()
    return render(request, 'Users/register.html', {'form': form})
 

@login_required
def profile(request):
    if request.method == "POST":
        u_form = UserUpdateForm(request.POST, instance = request.user)
        p_form = ProfileUpdateForm(request.POST, 
                                   request.FILES, 
                                   instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, f'You account has been updated!')
            return redirect('profile')                           
    else:
        u_form = UserUpdateForm(instance = request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)
    
    context = {
        'u_form' :u_form, 
        'p_form' :p_form
    }
    return render(request, 'Users/profile.html', context)

這是我的 forms.py 代碼

from socket import fromshare
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserChangeForm
from .models import Profile
class UserRegisterForm(UserChangeForm):
    email = forms.EmailField()
    password1 = forms.CharField(label = "Password", widget = forms.PasswordInput)
    password2 = forms.CharField(label = "Repeat password", widget = forms.PasswordInput)

    
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()
    
    class Meta:
        model = User
        fields = ['username', 'email']

class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['image']

請提出一些解決方案。 我正在關注 Corey Schafer 教程。

嘗試閱讀有關 django.contrib.auth 和密碼的信息。 https://docs.djangoproject.com/en/4.1/topics/auth/default/#sharing-passwords

Django 不要將密碼更改為 hash,您應該在 user.save() 之前自己做

在你的情況下:

... # your staff
form = UserRegisterForm(request.POST)
    if form.is_valid():
        user = form.save(commit=False)
        user.set_password(form.cleaned_data['password'])
        user.save()
        username = user.username
        messages.success(request, f'You are now able to log in!')
... # other staff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM