2012-03-06 155 views
0

后用户丢失首先,在所有的,我不得不说,我已经跟着几个SO答案(thisthis),但我还没有解决我的问题。Django的注册,登录

那么,我使用django.contrib.auth.views.login(工作正常)通过django注册,我已经在登录表单中设置next="/home_page/"参数。 asociated到/home_page/的观点是excuted,其回报是这样的:

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> 
+0

在您调用login()之后,您会收到用户的有效实例吗? – Sid 2012-03-06 14:53:37

+0

调试django.contrib.auth.views.login我看到如何正确登录后创建用户实例,但它在home_page视图中缺少。 – juankysmith 2012-03-06 15:22:13

+0

我没有看到任何明显的错误,你在做什么。也许粘贴你的整个views.py,这可能会提供一个线索。也可以尝试在你的/ home_page视图中放入@login_required(虽然这不应该是必需的,因为你在登录后重定向) – Sid 2012-03-06 15:33:30

回答

0

问题是,我创建了一个认证后端,用于其他用途,并在认证方法是不存在。

2

,可能会导致这样的事情是不是在你的浏览器中启用Cookie或Cookie否则不是唯一的东西。

登录时,会话创建,登录的用户添加到会话,会话cookie被传递到客户端(浏览器)。在下一次请求时,浏览器会将cookie发送回服务器,该服务器使用该服务器将匹配的会话从数据库中提取出来,并与登录的用户填充request.user(当然,这里是简化说明)。

因此,request.userAnonymousUser的唯一方法是未登录或未将cookie发送到服务器。

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

+0

+1:这很可能是我猜测的问题。也许值得尝试不同的浏览器。 – Sid 2012-03-06 15:52:29

+0

是的,我了解这一过程的原因是,当您呈现模板时,您必须使用渲染函数的第三个参数(context_instance = RequestContext(request))将该用户添加到应用TEMPLATE_CONTEXT_PROCESSORS的请求中。也许home_page视图不接受用户原因登录和视图之间没有呈现模板,但我虽然django.contrib.auth为你做了那 – juankysmith 2012-03-06 16:06:10

+0

啊! cookies在Firefox和Chrome中启用 – juankysmith 2012-03-06 16:11:37