Django:密码格式无效或散列算法未知

Posted

技术标签:

【中文标题】Django:密码格式无效或散列算法未知【英文标题】:Django : Invalid password format or unknown hashing algorithm 【发布时间】:2013-02-28 03:00:25 【问题描述】:

当我想使用简单的 CreateView 创建新用户时遇到问题。一切正常,我可以创建用户,但是当我想用新创建的用户登录时,我做不到。

我在管理员中获得了这种类型的密码:

密码格式无效或散列算法未知。

未存储原始密码,因此无法查看此用户的密码,但您可以使用此表单更改密码。

这是我的代码:

model.py

from django.db import models
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import AbstractUser, UserManager


    class CustomUser(AbstractUser):
        """app setting of user"""
        url = models.URLField(u'Site URL', max_length=100, null=True, unique=True)

    admin.site.register(CustomUser, UserAdmin)

urls.py

from django.conf.urls.defaults import *
from models import CustomUser
from django.views.generic import CreateView
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse

    urlpatterns = patterns('',
                   url(r'^create_user/$',(CreateView.as_view(model=CustomUser,       get_success_url =lambda: reverse('create_user'),
                                                                             template_name="create_user.html")), name='create_user'),
                   )

create_user.html

<div title="Create Form " id="/create_user">
        <p> <b>Create account:</b> </p>            
         form.errors 
    <form action="" method="post" id="id_create_user" >
        % csrf_token %
         form.as_p 
        <div>
            <input type="submit" value="Create account" style="">
        </div>

    </form>
</div>

创建用户后,我必须以管理员身份登录并更改此密码,然后一切正常。

我应该怎么做才能解决这个问题?

谢谢!

【问题讨论】:

【参考方案1】:

问题在于 CreateView 会根据模型自动生成表单,这意味着它直接写入密码字段,而不是使用正确的 API 来创建用户。

试试这个表格,它会为你处理:

from django.contrib.auth.forms import UserCreationForm

urlpatterns = patterns('',
   url(r'^create_user/$',(CreateView.as_view(model=CustomUser, get_success_url =lambda: reverse('create_user'), form_class=UserCreationForm, template_name="create_user.html")), name='create_user'),
)

这些表单本质上与您在管理员中看到的相同,这是一个很好的起点,如果您使用的是自定义用户模型,您可能需要做一些额外的工作来进行自定义。

这里是提供的 UserCreationForm 的源代码:https://github.com/django/django/blob/stable/1.5.x/django/contrib/auth/forms.py#L61-L110

你可以自己重新实现它作为一个普通的ModelForm,你必须包含的关键是调用user.set_password的save方法。

【讨论】:

可以,但是在模板中,我只显示了三个字段,pass、re-pass 和 username.. 但我想显示我的所有字段。 在答案末尾添加了一些内容,应该为您指明正确的方向

以上是关于Django:密码格式无效或散列算法未知的主要内容,如果未能解决你的问题,请参考以下文章

Castle ActiveRecord / NHibernate - 密码加密或散列

密码学知识之hash算法

密码学与安全技术Hash 算法

信息摘要

常用消息摘要算法介绍

Golang-常用校验算法