2012-03-06 120 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