我在开发服务器上的项目中使用Django注册。 当我注册新用户时,我使用EMAIL_BACKEND =' django.core.mail.backends.filebased.EmailBackend'获取激活链接。 当我尝试将激活链接放入Web浏览器时,出现错误,帐户未激活。
据说:
谢谢。 此函数用于生成密钥。
def create_profile(self, user):
"""
Create a ``RegistrationProfile`` for a given
``User``, and return the ``RegistrationProfile``.
The activation key for the ``RegistrationProfile`` will be a
SHA1 hash, generated from a combination of the ``User``'s
username and a random salt.
"""
salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
username = user.username
if isinstance(username, unicode):
username = username.encode('utf-8')
activation_key = hashlib.sha1(salt+username).hexdigest()
return self.create(user=user,
activation_key=activation_key)
我收到了那封邮件。但我使用EMAIL_BACKEND' django.core.mail.backends.filebased.EmailBackend'。
我认为问题来自这里。但我无法在生产服务器上进行测试。
我实际上解决了这个问题因为我生成了发送文件的电子邮件,这要归功于django为开发目的提供的文件电子邮件后端。在此文件中,当有回车符时,它会添加一个=字符。这就是激活帐户的链接。
答案 0 :(得分:0)
字符'='不在\ w +范围内。使用[\ w =] +代替\ w +。
将?P< activation_key> \ w + 替换为?P< activation_key> [\ w =] +
答案 1 :(得分:0)
您的激活密钥中不应包含=
个字符。
虽然sergzach
的答案可行,但我更感兴趣的是找出=
为什么会出现在那里。
django-registration
usually generates the key as follows:
salt = sha.new(str(random.random())).hexdigest()[:5]
activation_key = sha.new(salt+user.username).hexdigest()
你在哪里产生你的?