2

我正在使用django.contrib.auth.views.login and .logout视图。非常方便,开箱即用,将再次部署 AAA+ 等。

出现问题是因为我没有使用单独的登录页面,而是在每个页面中都有一个登录框(当然,除非用户已登录)。因此,当用户名/密码组合错误时,我会收到错误消息。我应该选择这三个路径中的哪一个?

  • 有一种秘密方法可以重定向到下一个,不仅在成功时,而且在错误时。如果是这样,请告诉我!
  • 我编写了自己的登录视图,同时使用了 Django 的消息系统
  • 我编写了一个登录页面(嗯,它只是缺少一个模板),所以我可以充分利用 Django 身份验证系统的强大功能。
4

1 回答 1

3

一种可能的解决方案(列表中的第一个 + 第三个选项):

  1. 您必须提供特殊的登录页面(即定义registration/login.html),对于未登录的用户,每个普通页面都有登录表单;
  2. 如果用户正常登录(此逻辑在 中处理django.contrib.auth.views.login):
    • 对于普通页面:将用户重定向到她登录的页面;
    • 对于登录页面:如果有next参数,则重定向到那里,否则重定向到主页;
  3. 如果用户无法登录:重定向(或重绘)登录页面并提供错误;
  4. 如果用户已登录:普通页面提供注销链接(如果用户想重新登录或通过其他帐户登录,特殊页面仍然存在)。

在普通页面中,登录表单应该是这样的<input type="hidden" name="next" value="{{ request.path }}" />

在项目设置中:

# in settings.py
LOGIN_URL = '/login'     # this should coinside with url pattern of login view
LOGOUT_URL = '/logout'   # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page

注意:我不使用 django 的内置注销视图,而是使用自己的:几乎相同,但仅针对 POST 请求进行注销。这不允许用户通过<img src='my_site/logout' />恶意代码注销。

于 2010-12-01T18:25:49.297 回答