0

Django の「ユーザー」オブジェクトを、追加の属性を持つ「AppAccount」オブジェクトなどにサブクラス化したアプリケーションがあります。今、私は次のことを行うビューを持っています:

appAccountObject.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, appAccountObject) 
redirect(someOtherView) 

によるとpdb、は呼び出し直後request.userの のインスタンスですが、 の最初の行では Django User インスタンスです。AppAccountlogin()request.usersomeOtherView

リダイレクト呼び出しが User オブジェクトを通常の Django User に戻すのはなぜですか? どうすればこれを回避できますか?

また、上記のコードは正しいですか?backendへの呼び出しをバイパスするために属性を追加しても問題ありauthenticateませんか? そうでない場合、これを行う正しい方法は次のとおりです。資格情報なしでユーザーを自動的にログインさせ、@login_requiredデコレーターによってラップされた別のビューにリダイレクトしたいです。

ありがとう。

4

1 に答える 1

1

リダイレクトにより、ユーザーのブラウザからまったく新しいリクエストが発生するため、セッション Cookie に基づいてユーザー オブジェクトをデータベースから再度取得し、 に割り当てる必要がありrequest.userます。これは、認証ミドルウェアで発生します。独自のバージョンを作成していない限り、常に既定のユーザー クラスが使用されます。

これは、User をサブクラス化することが良くない理由の 1 つにすぎません。代わりに、User と OneToOne の関係を持つ UserProfile クラスで拡張します。

于 2012-07-22T11:50:08.573 に答える