Google App Engine をRPX Nowユーザー認証とユーザーごとに制限されたアクセスパターンと組み合わせようとしています。
ユーザーごとのアクセス制限パターンは、GAE のグローバルな User.get_current_user() に依存しています。
from google.appengine.api import users
class CurrentUserProperty(db.UserProperty):
def checkCurrentUser(self, value):
if value != users.get_current_user():
raise db.BadValueError(
'Property %s must be the current user' % self.name)
return value
def __init__(self, verbose_name=None, name=None):
super(CurrentUserProperty, self).__init__(
verbose_name, name, required=True,
validator=self.checkCurrentUser)
ただし、 RPX のユーザー識別子を格納するGAE Utilities のセッションでは、グローバルなUserはありません。
私にとって最も明白な解決策は、ミドルウェアでいくつかのグローバル User 変数 (何らかの方法で現在の要求/スレッドにローカライズされたもの) を作成することです。ただし、競合状態がないと確信できる場合を除き、これは行いません。
CurrentUserProperty が構築されているときに、(リクエスト セッション変数に格納されている) 現在のユーザーの ID を CurrentUserProperty に取得する方法はありますか?
読んでくれてありがとう。
編集:
GAE の google/appengine/tools/dev_appserver.py:578 を読むと、次のことが行われます。
579 env['USER_ID'] = user_id
および google/appengine/api/users.py:92ff には次のように書かれています。
92 if _user_id is None and 'USER_ID' in os.environ:
93 _user_id = os.environ['USER_ID']
単一の Google App Engine リクエストで環境を安全に設定できることを示唆しているようです (しかし、私は間違っているかもしれません!)。
おそらく、ミドルウェアで環境変数を設定できます。面倒臭いので、他の誰かが(同様に)これに取り組んだかどうか知りたい.