用于pgcrypto编码密码的django哈希器。
django-pgcryptoauth的Python项目详细描述
用于PostgreSQL PGCrypto编码密码的Django哈希器。
django-pgcryptoauth是一个自定义django密码散列器,用于为使用postgres pgcrypto扩展加密的旧密码提供身份验证连续性。
因为我们没有访问明文密码的权限,所以我们只是让django理解并处理遗留算法。当用户成功登录时,django会自动将密码升级到首选算法。
依赖关系
当然,您需要使用安装了pgcrypto扩展名的postgresql数据库。
安装
安装django-pgcryptoauth包:
pip install django-pgcryptoauth
将pgcryptoauth添加到INSTALLED_APPS:
INSTALLED_APPS = ( ... 'pgcryptoauth', ... )
在django设置中将pgcryptoauth.hashers.PgCryptoPasswordHasher添加到PASSWORD_HASHERS:
PASSWORD_HASHERS = ( ... 'pgcryptoauth.hashers.PgCryptoPasswordHasher', )
注意:这个散列可能应该在列表的底部,以便其他散列优先。见https://docs.djangoproject.com/en/dev/topics/auth/passwords/
配置
默认情况下,pgcryptoauth将使用默认的数据库连接。但是,您可以通过将pgcryptoauth_数据库设置为django设置中的其他内容来指示它使用另一个连接。
PGCRYPTOAUTH_DATABASE = 'another_database'
当然,这个其他连接必须是一个有效的postgres数据库,具有pgcrypto扩展名,并在数据库设置中列出:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'my_database', 'USER': 'my_user', 'PASSWORD': 'my_pass', 'HOST': '127.0.0.1', 'PORT': '', }, 'another_database': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'another_database', 'USER': 'another_user', 'PASSWORD': 'another_pass', 'HOST': '127.0.0.1', 'PORT': '', } }
如果主数据库上未安装(或无法安装)pgcrypto扩展,则可能需要执行此操作。尤其是如果你的主数据库不是postgresql!
运行测试用例
执行单元测试:
python manage.py test pgcryptoauth
加载旧数据
注意:传统的pgcrypto散列密码看起来像$1$BFw5nhna$XeiE8c4FInYGp3oND2l9n1。当迁移这些密码时,我们只需要在散列前面加上pgcrypto$算法:
user.password = 'pgcrypto$$1$BFw5nhna$XeiE8c4FInYGp3oND2l9n1' user.save()
如果您通过djangoauth.useradmin查看用户密码,您应该看到:
algorithm: pgcrypto hash: $1$BFw******************************************
历史记录
v0.3-增加了python 3支持,支持django 1.8+。