我可以使用URL中的秘密创建自动登录django吗?

时间:2010-02-10 09:09:24

标签: django authentication

如何让用户只需点击链接即可登录我的Django网站?

我每周发送一封电子邮件,要求我的用户更新信息,我很乐意让他们只需点击链接即可登录。

我在其他网站上看过这个(比如Squarespace),但是之前有人用Django做过这个吗?

3 个答案:

答案 0 :(得分:3)

我不建议尝试通过网址登录用户。网址是未加密的(除非你使用的是HTTPS,甚至还可以删除),并且很容易拦截或只是用暴力来猜测。

我能想到两种可能的解决方案:

使用Django会话和Cookie

利用在Django中登录自动保存cookie的事实。一旦用户登录,他们将保持登录状态,直到他们注销(或cookie过期,但可以设置为永久生效)。然后,您需要做的就是创建某种类型的/myprofile/网址,然后将用户发送到那里。如果用户已登录,则显示其用户配置文件。

使用哈希编码

但是,如果您确实想要使用用户名和密码传递网址,我建议将其用户名和密码混淆为MD5哈希值,然后您可以通过网址传递。

import urllib, hexlib

username = 'joeblow'
password = 'password'

url = 'http://www.mysite.com/users/login/'
url += urllib.urlencode({
        'username':hashlib.md5(username.lower()).hexdigest(),
        'password':hashlib.md5(password.lower()).hexdigest(),
    })
# return the url to the user in the email template
return url

注意:我仍然强烈推荐选项1!

答案 1 :(得分:2)

视图中只有log them in。你必须弥补authenticate()调用的不足,但你可以查看源代码并找出需要做什么。

答案 2 :(得分:1)

token-based automatic login的想法怎么样?它不涉及向用户的电子邮件发送用户名或密码。您只需发送一个整数值,该值对应于服务器上的安全令牌,该值在几个小时后过期。