我们有一个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
答案 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基础结构处理。如果您使用自己的身份验证库,无论使用何种协议,您都必须以不同方式存储用户信息。