有一种简单的方法可以像Djzon一样在Django中配置身份验证系统 是吗?
如果您要登录您的亚马逊帐户,并且您要关闭浏览器,即使您再次访问该网页两天后,亚马逊也会以您的名字问候您。当您要去购物时,您仍然需要重新输入密码。
有可能在Djanogo这样做吗?我是否必须在settings.py中做一些特别的事情?
据我所知,我只是可以登录或退出,即使我要关闭浏览器,我也会在没有询问密码的情况下再次登录。
感谢您的帮助!
Craphunter
答案 0 :(得分:1)
请参阅会话文档,特别是标题为Browser-length sessions vs. persistent sessions的部分。
他们准确地解释了如何实现您的要求:request.session.set_expiry(...)
。
答案 1 :(得分:0)
我认为亚马逊所做的很可能是基于时间而不是你是否关闭浏览器。所以你最应该做的就是存储在会话中,这是你最后一次看到那个用户。如果你在一个多小时前看到它们,然后自动将它们注销(使用Middleware为此)。
request.session['lastseen'] = datetime.datetime.now()
现在,在您的middlware中,请务必将其记录下来,因为您仍需要将id
或username
存储在会话中。这仍然很容易,只需阅读:
http://docs.djangoproject.com/en/dev/topics/auth/#how-to-log-a-user-out
所以基本上你要做的就是注销一个用户,然后这样做,将他们的id
或者只是他们的username
存储到会话中,以便你以后可以检索它。执行注销将完全清除其会话,因此您需要确保在执行id
命令后添加username
或logout()
。然后,只要您想要检索该数据,只需将其从会话变量中拉出来。
logout(request.user)
request.session['userid'] = request.user.id
然后,您现在有三种用户可能:AnonymousUser w / out saved id
,AnonymousUser w / saved id
或Authenticated User。
这样即使有人未登录,您仍然可以从会话中获取id
。