まず、これはではなく、と同じです。thisと同じです。 ModelBackendにはrequest
のメンバーはありません。アクセスリクエストセッションfrom backend.get_user
グローバルリクエストオブジェクトまたはそのセッションIDにアクセスすることなく、現在のユーザーのセッションにアクセスしたいとします。
なぜですか?自分の認証バックエンドを書いて、に拡張しました。私は関数get_user (self, user_id)
を持っており、これはすべてのリクエストで呼び出されます(これはDjangoの認証ミドルウェアによって自動的に行われます)。残念ながら、get_user
にはrequest
へのアクセス権がありませんが、私の場合はセッションのデータでチェックしたいのですが(なぜなら、私はローカルデータベースを持っていないため、リモートミドルウェアからすべてのデータを取得するからです。何らかのキャッシングを行う快適な方法です)。
申し訳ありませんが、これは古いスレッドですが、私は参照されたコードを見ていますが、私が今認証したユーザーの要求データにアクセスしている場所はわかりません。 – ThatAintWorking
@RonSmith私は少しリンクを更新しました。そのトリックは、すべてが 'RemoteUserMiddleware.process_request'によって実行され、' request'オブジェクトが渡されるということです(middleware.py#L40)。 'Remote-User' HTTPヘッダー(L50)の有無をチェックし、そうであればそのデータを' RemoteUserBackend.authenticate'(L73)に渡し、その結果を 'request'(L77)に保存します。この場合、HTTPヘッダーの値だけがpassebですが、認証バックエンドでセッション情報が必要な場合は、ミドルウェアから事前にセッションを隠すことができます。 – drdaeman
例として数行のコードで回答を更新してもよろしいですか?ありがとう。 –