【问题标题】:Auth-System easy way to do it like Amazon?Auth-System 像亚马逊一样简单的方法?
【发布时间】:2011-06-07 06:49:02
【问题描述】:

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

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

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

据我所知,我只能登录或退出,即使我要关闭浏览器,我也无需询问密码即可再次登录。

感谢您的帮助!

寻宝者

【问题讨论】:

  • 它被称为 cookie:它将您的用户名存储在您的计算机上。是的,您可以将它与 Django(或几乎任何东西)一起使用。不过请注意亚马逊的其他功能:它“记住”您的姓名和偏好,但如果您真的想做任何重要的事情,它会要求输入密码。这是巧妙的设计。

标签: python django web login


【解决方案1】:

请参阅有关会话的文档,尤其是标题为 Browser-length sessions vs. persistent sessions 的部分。

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

【讨论】:

  • 这不是他要问的。他希望网站记住上次登录的用户,但在很长一段时间后将其注销。
【解决方案2】:

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

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

现在在您的中间件中,请小心将它们注销,因为您仍然需要将它们的 idusername 存储在会话中。这仍然很容易做到,只需在这里阅读: http://docs.djangoproject.com/en/dev/topics/auth/#how-to-log-a-user-out

所以基本上你想要做的就是注销用户,然后在这样做之后,将他们的id 或只是他们的username 存储到会话中,以便以后检索它。注销将完全清除他们的会话,因此您需要确保在执行logout() 命令之后添加他们的idusername 。然后,无论您想在哪里检索该数据,您只需从会话变量中提取它即可。

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

那么您现在为用户提供了三种可能性:AnonymousUser w/out saved id、AnonymousUser w/ saved id 或 Authenticated User。

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

【讨论】:

  • 如果会话 cookie 不是持久的,那么浏览器将删除包含会话 ID 的 cookie,这意味着会话将被丢弃。特别是,request.session['lastseen'] 在浏览器关闭后将不可用。
  • 好的,那有没有办法像亚马逊一样呢?
  • @craphunter -- 让会话 cookie 持久化。阅读有关设置的设置信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2011-07-15
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2016-11-26
  • 2012-12-08
相关资源
最近更新 更多