1

我正在尝试使用 plone 网站上的 pmr2.oauth 提供程序并使用 oauthV1 将我的自定义 api 连接到 plone 网站。从请求临时密钥到接收 oauth 访问令牌,一切都很顺利。

但是当我尝试访问资源时,我得到一个无效的范围。我被告知要在 pmr2.oauth 包中填写内容类型范围管理器,我必须将以下每种门户类型的映射填充到允许的子路径列表:Plone 站点、集合、文件、文件夹、管理器文件夹,页面、页面和子站点。

但是我不知道在这里填写什么,所以我希望你们能帮助我。

4

1 回答 1

1

包所有者在这里,首先我必须道歉并说我可能可以更好地记录这一点(确保它是通过 doctests 记录的,但可以做得更好)!

您需要填写的是您想要访问的特定内容类型的视图。例如,如果您希望显示集合中所有项目的列表,您将找出视图的名称(在本例中为 atct_topic_view)。对于标准页面,它将是 document_view。也就是说,OAuth 通常针对通常通过更简洁的格式(例如 json)进行通信的 Web 服务,因此开发人员可以开发特定于某些现有(或自定义)Plone 内容类型的新视图,然后可以将它们添加到要提供的映射。

最后,映射本质上是端点,加上一个可以是通配符的可选子路径。在撰写本文时,为自定义子路径指定通配符并不意味着根父视图可用,因此假设您有一个自定义下载视图,可以让用户列出链接到实际内容的子路径的格式,您可能会做一些事情像这样:

Collection:

download_feed
download_feed/*

将在 Collection 内容类型中提供 download_feed 视图,然后提供其中的任何子路径(通常通过实现zope.publisher.interfaces.IPublishTraverse自定义视图来提供)。

或者,您可以编写自己的 ScopeManager。只需创建一个继承自 pmr2.oauth.scope.BaseScopeManager(或 BTreeScopeManager)的类,实现所有方法(和测试),然后在您的代码中或使用这样的 zcml 注册它:

<adapter
    for="zope.annotation.interfaces.IAnnotatable
         your.app.interfaces.IAppLayer"
    factory="your.app.ScopeManager"
    provides="pmr2.oauth.interfaces.IScopeManager"
    />

然后应该用您自己的覆盖基于默认(门户)内容类型的范围管理器。

于 2013-10-22T00:43:19.247 回答