Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django UserCreationForm、哈希密码和身份验证()_Django_Authentication_Login_Hash_Registration - Fatal编程技术网

Django UserCreationForm、哈希密码和身份验证()

Django UserCreationForm、哈希密码和身份验证(),django,authentication,login,hash,registration,Django,Authentication,Login,Hash,Registration,我是Django的新手,我正在尝试创建简单的用户注册/登录应用程序。 对于注册,我使用自定义UserCreationForm: def registration(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): new_user = form.save() messa

我是Django的新手,我正在尝试创建简单的用户注册/登录应用程序。 对于注册,我使用自定义UserCreationForm:

def registration(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            messages.info(request, "You've successfully registered")
            return HttpResponseRedirect('/')
    else:
        form = UserCreationForm
    return render(request, 'accounts/registration.html', {'form': form})
而且效果很好。但是写登录函数我遇到了困难。我在/accounts/login'User'对象上获得了AttributeError,但该对象没有属性'backend'。即使登录/密码正确,authenticate()似乎也不会返回任何对象

def login(request):
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            userData = form.cleaned_data
            user = authenticate(username=userData['username'],password=userData['password'])
            auth_login(request, user)
            messages.info(request, "You're successfully logged in")
            return HttpResponseRedirect('/')
        else:
            messages.info(request, 'Invalid username or password')
            return HttpResponseRedirect('/accounts/login')
    else:
        form = LoginForm() 
    return render(request, 'accounts/login.html', {'form': form}
我认为关键是密码以散列形式保存在DB中,这就是为什么userData['password']与同一用户名的DB中的值不相同的原因

修复此错误的最佳方法是什么

跟踪误差

Internal Server Error: /accounts/login
Traceback (most recent call last):
  File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\core\handlers\base.py"
, line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "C:\Python27\myproject\djcode\first_venv\myownproject\accounts\views.py", line 36, in login
    auth_login(request, user)
  File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\contrib\auth\__init__.
py", line 92, in login
    request.session[BACKEND_SESSION_KEY] = user.backend
  File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\utils\functional.py",
line 203, in inner
    return func(self._wrapped, *args)
AttributeError: 'User' object has no attribute 'backend'
在你的代码中试试这个

user = authenticate(username=userData['username'],password=userData['password'])
if user:
    user.backend = 'django.contrib.auth.backends.ModelBackend'
    auth_login(request, user)
else:
    print "invalid login"

请您出示UserCreationForm代码,可以将密码直接保存到数据库中。如果您使用user.set_password(),它将对密码值进行django编码,然后在身份验证时对其进行正确检查。我使用默认的UserCreationForm,不进行更改,因此在forms.py中,我只有LoginForm(用户名/密码)。也许我该怎么纠正它?添加跟踪错误无效登录[05/Jul/2013 16:51:20]“POST/accounts/login HTTP/1.1”200 631只要在UserCreationForm中使用User.objects.create\u User方法,它与哈希无关。你能发布你的登录信息和用户创建表单吗。。如果您厌倦了这样做,那么只需使用这个类LoginForm(forms.Form):username=forms.CharField(max_length=30)password=forms.CharField(widget=forms.PasswordInput)LoginForm很简单,默认的UserCreationForm(像这样)谢谢您的建议,我正在尝试通过创建基本应用来学习如何使用django。否则我永远也学不会:)试着在错误出现的地方调试。。。从django管理员创建一个用户,并运行登录视图,并将其放入。在user=authenticate()之后。。。。在django admin中使用注册视图时,还要检查用户是否被创建……我已经尝试过了,而且……哦,神奇的是,它工作了!但是有了新用户。我没有在注册视图中更改任何内容,但不知何故,登录可以与新用户(从django管理员和注册视图添加)一起工作,而不与旧用户一起工作。非常感谢。