我有我写了别的一个Python库。所以我导入在Django中使用,我面对的问题是如何获取密码。如何在django中获取密码?
mycustom_lib_function(username, password)
username
我可以通过request.user
在通不过,我不知道如何获取密码。有人能帮我吗?谢谢。
我有我写了别的一个Python库。所以我导入在Django中使用,我面对的问题是如何获取密码。如何在django中获取密码?
mycustom_lib_function(username, password)
username
我可以通过request.user
在通不过,我不知道如何获取密码。有人能帮我吗?谢谢。
你的功能mycustom_lib_function
不应该使用明文密码。在用户与应用程序进行身份验证,你有一个User
对象(从django.contrib.auth.models
),其中包含一个哈希密码:
>>> user.username
u'myusername'
>>> user.password
u'sha1$98ffc$b5fd085b8bc1c05fd241dfc97230631926141fe7'
键入到表单中的实际密码不存储明文,作为标准的Web安全建议您不要在认证之后存储密码的纯文本值。
需要注意的是,你可以通过执行检查上述哈希:
>>> from hashlib import sha1
>>> password = 'weak_password'
>>> _, salt, hashpw = user.password.split('$')
>>> sha1(salt+password).hexdigest() == hashpw
True
现在,如果你的应用包装成你不用管,需要密码才能做某些动作的另一个应用程序,你都不可能考虑存储密码明文(或稍微好一点的加密),但django.contrib.auth
不会为你做这个。如果您设置了OAuth类型的凭证系统会更好,该凭证系统完全可以执行此功能,而不需要用户向中间站点显示其密码。
如果你做控制的应用程序,我将放弃要求输入密码才能被传递给它。
在User
的密码散列,所以你不能得到它。询问用户。
+1 '询问用户' – 2012-03-05 18:18:09
感谢。你是说用户必须手动输入密码吗?我看着'User' API,不太清楚怎样才能解决这个问题。 – user1012451 2012-03-05 18:18:39
我的意思正是我写的。 – 2012-03-05 18:22:29
您可以在技术上的密码存储为纯文本,但它不是从安全的立场八邑权,见this answer,强烈不推荐! django.contrib.auth.hashers有一些用于密码的好工具,请参阅the official Django docs。
如果您知道明文密码可能是什么,即我的应用程序中有一个全局存储的默认密码以纯文本格式存储,如下例所示。要检查用户都有自己的密码设置为默认的,你可以,如果纯文本的编码密码匹配使用check_password函数将返回true:
from django.contrib.auth.hashers import check_password
from django.contrib.auth.models import User
u = User.objects.all().first()
if check_password('the default password', u.password):
print 'user password matches default password'
else:
print 'user a set custom password'
另见is_password_usable和make_password功能。
我无法控制它。该库用于远程存储库控制(hg,git),因此需要用户名和密码才能调用它。这与django登录基本相同)。所以想想一个实现“克隆库”的函数。该函数将url,用户名,密码和克隆到本地磁盘。是。该函数接收明文密码。所以我们不能通过Django解密这个密码? THanks – user1012451 2012-03-05 19:02:18
嗯,我设计了图书馆。所以现在我要输入用户名和密码,这是你观察到的明文。但我不认为我可以将哈希传入这些远程存储库进行身份验证。 – user1012451 2012-03-05 19:08:25
@anotheruser是的,你不能通过django“解密”散列密码。 (哈希是一种单向函数,不是真正的加密)。您可以在创建用户帐户时以明文形式将用户的密码保存在数据库中。请参阅:http://stackoverflow.com/questions/44109/extending-the-user-model-with-custom-fields-in-django您应该向用户明确说明您以明文存储密码。另一种可能性是你跟踪你的应用程序中的权限,并在git/hg repos中为用户创建一个用户'django'的帐户,该帐户为用户执行操作。 – 2012-03-05 19:12:00