0

首先,我不得不说我已经遵循了一些 SO 答案(thisthis),但我还没有解决我的问题。

好吧,我正在django.contrib.auth.views.login通过 django-registration 使用(正常工作),并且我已经next="/home_page/"在登录表单中设置了参数。关联到的视图/home_page/被执行,它的返回看起来像这样:

return render_to_response('myapp/shop_list.html', 
                        {'shop': entry_list,},
                        context_instance=RequestContext(request))

我没有在登录和此视图之间呈现任何其他模板,但是在调试时,我意识到在此返回之前User不在请求中,因此模板接收AnonymousUseruser.is_authenticated()返回 False

用户在DDBB,密码正确。此时如何获取已登录的用户?

以下是有关我的应用程序的一些信息,可能会有所帮助:

settings.py
===========

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.request',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'myapp',
    'registration',
    'django.contrib.admin',
)

login.html
==========

{% block maincontent %}
<form method="post" action="">{% csrf_token %}
    {{form.as_p}}
    <input name="next" type="hidden" value="/home_page/" />
    <input type="submit" value="Login">
</form>
{% endblock %}

link to login
=============

<a href="{% url django.contrib.auth.views.login %}">Login</a>
4

2 回答 2

2

真的,唯一可能导致类似情况的原因是您的浏览器中没有启用 cookie,或者没有存储 cookie。

当您登录时,会创建一个会话,将登录用户添加到会话中,并将会话 cookie 传送到客户端(您的浏览器)。在下一个请求中,您的浏览器会将 cookie 发送回服务器,服务器使用它从数据库中提取匹配的会话并填充request.user已登录的用户(这里当然是简化的解释)。

request.user所以,真正成为一个人的唯一方法AnonymousUser是要么没有登录,要么没有将 cookie 发送到服务器。

检查浏览器中的设置以及您可能正在运行的任何扩展程序,以确保没有任何东西干扰 cookie。您可能想尝试其他浏览器,并查看该行为是否可重复。

于 2012-03-06T15:36:52.823 回答
0

问题是我出于另一个目的创建了一个身份验证后端,而身份验证方法不存在。

于 2012-03-07T16:25:43.357 回答