セッションID の取得

214 views
Skip to first unread message

deshi

unread,
Mar 13, 2008, 4:44:40 AM3/13/08
to django-ja
Django のビューではない場所(具体的にはカスタムの AUTHENTICATION_BACKENDS の中)から
セッション情報にアクセスしたいと思っています。ビュー内からだとリクエストオブジェクトが
あるので苦もなくセッション情報にたどり着けるのですが、ビュー以外からだと、セッション
ID を取得する方法が見つかりません。直接クッキーを見ればいいのでしょうが、この方法もわか
りません…

どなたか解決方法をご教示ください。

Yasushi Masuda

unread,
Mar 13, 2008, 10:58:12 PM3/13/08
to djan...@googlegroups.com
deshi さん、

カスタムの認証バックエンドを作成する場合、 authenticate() メソッドに渡す引数の設計は
自分で行います。したがって、ここに session_id やリクエストオブジェクトそのものを
渡すように設計してもかまいません。

ただし、バックエンドでユーザ名とパスワード以外の情報を引数にとる authenticate()
メソッドを定義する場合、ログインのためのビューを (django.contrib.auth.views.login では
なく)自作せねばなりません。 django.contrib.auth.views.login がログインフォームに使って
いるマニピュレータが、ユーザ名とパスワードで認証を行って、正しいユーザであるか検証する
ためのバリデータ、 isValidUser を使っているからです。

deshi さんは書きました:

deshi

unread,
Mar 14, 2008, 9:15:03 AM3/14/08
to django-ja
masuda さん、フォローありがとうございます。

>カスタムの認証バックエンドを作成する場合、 authenticate()
>メソッドに渡す引数の設計は自分で行います。
なるほど、django.contrib.auth.authenticate() はその引数を
そのままカスタムの authenticate() に渡してくれるのですね。
# 今までの経験上、どうも可変の引数に慣れていないのが盲点でした。

>ただし、バックエンドでユーザ名とパスワード以外の情報を引数
>にとる authenticate() メソッドを定義する場合、ログインのため
>のビューを(django.contrib.auth.views.login ではなく)自作せ
>ねばなりません。
実はログイン・ログアウトの処理は専用のビューを用意している
ワケではなく、通常のページの右上に常にフォームを表示してい
ます。(ログインしていない場合はフォームを表示、している場合
は「ようこそ xxx さん[ログアウト]」という、よくあるやつです)
ログイン状態を常に感知していなければならないため、ログイン
ログアウト処理はカスタムのコンテキストプロセッサで行ってい
ます。
そのなかで、authenticate を直接呼んでいたため、今回は単に
セッション ID を引数として渡すだけで済みそうです。

以上、ありがとうございました。
Reply all
Reply to author
Forward
0 new messages