如何让用户只需点击链接即可登录我的Django网站?
我每周发送一封电子邮件,要求我的用户更新信息,我很乐意让他们只需点击链接即可登录。
我在其他网站上看过这个(比如Squarespace),但是之前有人用Django做过这个吗?
答案 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的想法怎么样?它不涉及向用户的电子邮件发送用户名或密码。您只需发送一个整数值,该值对应于服务器上的安全令牌,该值在几个小时后过期。