带有rpxnow的Google App Engine db.User属性

时间:2010-09-13 10:55:50

标签: python google-app-engine rpxnow

我们有一个Django项目,该项目在Google App Engine上运行,并在多个模型中使用db.UserProperty。我们没有自己的用户模型。

我的老板想使用RPXNow(Janrain)进行身份验证,但在我对其进行集成后,users.get_current_user()方法返回None。这是有道理的,因为Google没有对我进行身份验证。但是我应该对db.UserProperty属性使用什么?是否可以使用rpxnow并且仍然可以使用Google的User对象?

在此之后我尝试在我的应用程序中使用OpenID身份验证(使用联合登录),它运行良好:我仍然有users.get_current_user()个对象。据我所知,rpxnow也使用openID,这意味着(对我来说)应该可以用rpxnow获取User对象。但是如何?

干杯, psmith

2 个答案:

答案 0 :(得分:3)

我还没有尝试过,但App Engine现在支持联合登录(OpenID)作为身份验证机制。您可以从信息中心启用它。

在此处阅读更多内容:http://code.google.com/googleapps/domain/sso/openid_reference_implementation.html

无论如何,使用Polymodel集成RPXNow-以将其链接到您的应用程序非常容易,如下所示:

class InternalUser(polymodel.PolyModel):
  name = db.StringProperty(required=True)
  groups = db.ListProperty(db.Key)

class GoogleUser(InternalUser):
  google_user = db.UserProperty(required=True)

class OpenIDUser(InternalUser):
  unique_identifier = db.StringProperty(required=True)

然后使用db.UserProperty而不是db.ReferenceProperty(required=True, reference_class=InternalUser)

答案 1 :(得分:1)

如果您使用其中一种内置身份验证方法,则只能获取User对象。用户对象提供User API的接口,由App Engine基础结构处理。如果您使用自己的身份验证库,无论使用何种协议,您都必须以不同方式存储用户信息。