Auth-System像亚马逊一样轻松实现这一目标吗?

时间:2011-01-11 16:13:55

标签: python django web login

有一种简单的方法可以像Djzon一样在Django中配置身份验证系统 是吗?

如果您要登录您的亚马逊帐户,并且您要关闭浏览器,即使您再次访问该网页两天后,亚马逊也会以您的名字问候您。当您要去购物时,您仍然需要重新输入密码。

有可能在Djanogo这样做吗?我是否必须在settings.py中做一些特别的事情?

据我所知,我只是可以登录或退出,即使我要关闭浏览器,我也会在没有询问密码的情况下再次登录。

感谢您的帮助!

Craphunter

2 个答案:

答案 0 :(得分:1)

请参阅会话文档,特别是标题为Browser-length sessions vs. persistent sessions的部分。

他们准确地解释了如何实现您的要求:request.session.set_expiry(...)

答案 1 :(得分:0)

我认为亚马逊所做的很可能是基于时间而不是你是否关闭浏览器。所以你最应该做的就是存储在会话中,这是你最后一次看到那个用户。如果你在一个多小时前看到它们,然后自动将它们注销(使用Middleware为此)。

request.session['lastseen'] = datetime.datetime.now()

现在,在您的middlware中,请务必将其记录下来,因为您仍需要将idusername存储在会话中。这仍然很容易,只需阅读: http://docs.djangoproject.com/en/dev/topics/auth/#how-to-log-a-user-out

所以基本上你要做的就是注销一个用户,然后这样做,将他们的id或者只是他们的username存储到会话中,以便你以后可以检索它。执行注销将完全清除其会话,因此您需要确保在执行id命令后添加usernamelogout() 。然后,只要您想要检索该数据,只需将其从会话变量中拉出来。

logout(request.user)
request.session['userid'] = request.user.id

然后,您现在有三种用户可能:AnonymousUser w / out saved id,AnonymousUser w / saved id或Authenticated User。

这样即使有人未登录,您仍然可以从会话中获取id