2

我已经完成了一个简单的登录,当经过身份验证的用户被重定向到带有 url 的页面时,它可以正常工作:

url(r'^(?P<user_id>\d+)/$', 'auth.views.main', name='main'),

现在我正在尝试使用 aLoginRequired-Middleware但是当我这样做并尝试登录时,我得到:

"POST  /login/ HTTP/1.1" 302 0
"GET   /1000/  HTTP/1.1" 302 0

我留在初始登录页面。我使用一个常见的片段来做到这一点

LOGIN_URL = ( '/login/' )

怎么了?

4

1 回答 1

1

不幸的是,您提供的代码不足以确定您的错误,所以我只能给您指点:

  • 确保您实际上还没有缓存 HTTP 302 REDIRECT 站点,从早期的实验。有关有用的提示,请参见此处
    重置您的浏览器缓存。如果您使用的是 Chrome,您可以通过按 CTRL+SHIFT+J(启动开发者工具)并长按顶部导航 url 栏旁边的重新加载按钮来获得多个缓存清除选项。

    对于 Firefox,另请参阅这些有用的建议。

    1. http://support.mozilla.org/es/questions/848678

    2. https://superuser.com/questions/23134/how-to-turn-off-firefox-cache

  • 您刚刚从 <1.3.x 版本升级 Django 吗?我遇到了一种情况,密码被新的默认哈希器重写,因此无法再登录。直接在auth_users- 表中的数据库中检查密码哈希器的一致性。例如 SHA1 密码哈希以sha1...

  • 确保PASSWORD_HASHERS在您的settings.py, 中设置列​​表的顺序是保留原始项目的主要哈希器 在顶部。即用于最初散列用户密码的散列算法。

  • 是在你的项目url(r'...'...)的根目录中吗?urls.py

  • 确保在您的部分中'django.contrib.auth'列出(尽管如果不是这种情况,您应该得到错误)并且必须预先加载的应用程序实际上放在最上面。INSTALLED_APPSsettings.py

  • 根据您的代码片段的注释检查您的TEMPLATE_CONTEXT_PROCESSORS,MIDDLEWARE_CLASSES在 settings.py 中的设置,并确保它与SessionMiddleware您的 Django 版本兼容。

  • 检查项目中所有进行重定向的代码行:

检查:

    from django.views.generic.base import RedirectView

    url(r'^.*$', RedirectView.as_view(url='<url_to_view>', permanent=False), name='index')

或者

    from django.http import HttpResponsePermanentRedirect
    HttpResponsePermanentRedirect('url...')

请注意,根据其通用视图范例 ,在 Django 1.5 中,已弃用的redirect_to函数已替换为。RedirectView

重定向(...)

    url('^pattern/$', lambda _: redirect('/redirecttourl/'))
    url(r'^pattern$', redirect('example.com')),
    url(r'^pattern$', redirect(projectname.views.home)),
    (r'^accounts/profile/$', 'redirect_to', {'url': 'generic_account_url'}),
    HttpResponseRedirect(....)
    HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
  • Django 的内置身份验证登录页面包含一个next查询字符串。next=确定登录后返回的页面:

请参阅:http ://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required

  • 检查服务器的 HTTP 访问日志。重定向后登录站点的内容大小是否与重定向前登录相同?

它有助于在登录过程中提供整个 HTTP 访问历史记录。由于您不会在重定向循环中挂起,因此必须遵循比上述两个更多的 HTTP。

于 2013-08-25T08:42:26.413 回答