2012-03-06 11 views
0

最初に、私はいくつかの答え(thisthis)に従ったと言わなければならないが、私は問題を解決できない。ログイン後にユーザーが行方不明になる

まあ、django登録でdjango.contrib.auth.views.login(正しく動作する)を使用していて、ログインフォームにnext="/home_page/"のパラメータを設定しました。ビューは/home_page/にasociated excutedされ、そのリターンは次のようになります。

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

私は、ログインしてこのビューの間に、他のテンプレートをレンダリングdidntのが、デバッグ時に、私は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

+0

django.contrib.auth.views.loginのデバッグログイン後にUserインスタンスが正しく作成された方法はわかりますが、home_pageビューには表示されません。 – juankysmith

+0

私は何をしているのか明らかに間違っていることはありません。たぶんあなたの全体のviews.pyを貼り付けると、手がかりを与えるかもしれません。また、/ home_pageビューに@login_requiredを入れてみてください。(ログイン後にここをリダイレクトする必要はありませんが) – Sid

答えて

0

問題は、別の目的のために認証バックエンドを作成し、認証メソッドが存在しないことでした。

2

は本当に、そのようなことを引き起こす可能性がある唯一のものは、ブラウザのクッキーを有効にしたされていない、またはクッキーは、そうでない場合は保存されません。

ログインするとセッションが作成され、ログインしたユーザーがセッションに追加され、セッションクッキーがクライアント(ブラウザ)に配信されます。次のリクエストでは、ブラウザはクッキーをサーバーに戻します。サーバーはクッキーを使用して一致するセッションをデータベースから取り出し、ログインしたユーザーにrequest.userを入力します(ここでは簡単な説明)。

が実際にはAnonymousUserである唯一の方法は、ログインしていないか、サーバーにクッキーを送信していないことです。

ブラウザの設定と実行中の拡張機能で、Cookieを妨害するものがないことを確認してください。別のブラウザを試して、その動作が繰り返し可能かどうかを確認することもできます。

+0

+1:おそらく私が推測している問題です。別のブラウザを試してみる価値があるかもしれません。 – Sid

+0

はい、私がこのプロセスについて理解したことは、テンプレートをレンダリングするときに、レンダリング関数の3番目の引数(context_instance = RequestContext(request))を使用してTEMPLATE_CONTEXT_PROCESSORSを適用して、リクエストにUserを追加する必要があるということです。たぶん、home_pageのビューは、ログインとビューの間にレンダリングされたテンプレートがないのに、私はdjango.contrib.authがあなたのためにそれをしたのを理由にユーザーを受け付けませんでした。 – juankysmith

+0

ああ!クッキーはfirefoxとchromeで有効にされています – juankysmith

関連する問題