天道酬勤,学无止境

appengine 将用户视为附加参数(appengine sees User as additional parameter)

问题

我在我的应用引擎服务器上使用 OAuth。 做起来相当简单,简单的添加User作为参数之一。 但是当我这样做时,我收到编译错误

多个实体参数。 每个方法只能有一个实体参数...

@ApiMethod(path = "updateDocument", name = "updateDocument", httpMethod = ApiMethod.HttpMethod.POST)
public void updateDocument(User user, MyDocument input){
  ...
}

它适用于表单的方法

public MyBean sayHiUser(@Named("name") String name, User user)

当我有像MyDocument这样的自定义对象时,它就不起作用了。

回答1

我感觉您的用户不是 import com.google.appengine.api.users.User 类型。

文档指出“每个方法只能有一个实体参数”(请参阅​​ https://cloud.google.com/appengine/docs/java/endpoints/parameter-and-return-types)。

但是,“除了参数或注入类型之外的任何类型都被视为实体类型”,而 com.google.appengine.api.users.User 属于“注入”类型:因此您通常不会有任何问题,除非您的用户不是这个类型。

我个人有类似的方法

public Customer insert(final User user, Customer customer, ...

哪个工作得很好

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何编写 sbt 插件以通过代理启动应用程序(how to write an sbt plugin to launch the app with an agent)
    问题 我想在开源之前为我的项目创建一个 sbt 插件。 该项目将一个 Java 代理附加到运行应用程序的开始,以对其进行各种类型的分析。 代理写出文本文件供以后处理。 我希望能够编写一个可以 有一个名为runWithProfiling的替代run ,它启动一个新的 java 进程,将代理添加到参数列表中,并传递所有用户命令。 退出时,我想调用一些任意的后处理代码来生成 HTML 报告 我大致知道如何创建新命令,但我不知道如何最好地实现run的替代方案......我不想通过复制run所有代码来重新发明轮子。 有没有一种方法可以调用run但确保我的参数被传递(一次)并且它绝对是一个新的 java 进程? 此外,能够为测试做同样的事情会很棒。 更新:这是我目前拥有的代码,但它存在几个问题,标记为TODO s import sbt._ import Keys._ import sbt.Attributed.data object LionPlugin extends Plugin { val lion = TaskKey[Unit]("lion", "Run a main class with lions-share profiling.") override val projectSettings = Seq( fork := true, javaOptions ++= Seq( "
  • appengine sees User as additional parameter
    I am using OAuth with my app-engine server. It's rather simple to do, simple add User as one of the parameters. But when I do I get the compile error Multiple entity parameters. there can only be a single entity parameter per method... @ApiMethod(path = "updateDocument", name = "updateDocument", httpMethod = ApiMethod.HttpMethod.POST) public void updateDocument(User user, MyDocument input){ ... } It works fine for the methods of the form public MyBean sayHiUser(@Named("name") String name, User user) It just doesn't work when I have custom objects like MyDocument.
  • 为 appengine 设计访问/网络统计计数器模块(Designing an access/web statistics counter module for appengine)
    问题 我需要一个用于跟踪一些请求处理程序并将统计信息收集到 bigtable 的 appengine 访问统计模块。 我还没有在 github 上找到任何现成的解决方案,谷歌的例子要么过于简单(memcached frontpage counter with cron)要么过度(准确的分片计数器)。 但最重要的是,其他地方讨论的 appengine-counter 解决方案都没有包含统计所需的时间组件(每小时、每日计数)。 要求:系统不需要 100% 准确,可以忽略内存缓存丢失(如果不常见)。 这应该可以大大简化事情。 这个想法是只使用内存缓存并按时间间隔累积统计信息。 用例:您系统上的用户创建内容(例如页面)。 你想跟踪大约。 每小时或每天查看用户页面的频率。 有些页面经常被查看,有些则从不。 您想按用户和时间范围查询。 子页面可能有固定的 ID(查询主页上点击次数最多的用户)。 您可能想要删除旧条目(查询年份 = xxxx 的条目)。 class StatisticsDB(ndb.Model): # key.id() = something like YYYY-MM-DD-HH_groupId_countableID ... contains date # timeframeId = ndb.StringProperty() YYYY-MM-DD-HH needed for
  • Cloud Endpoints 的用户授权(User Authorization for Cloud Endpoints)
    问题 我正在开发一个云端点后端,并希望将某些操作限制为管理员用户。 我当前的代码是这样工作的: @ApiMethod(httpMethod = "PATCH", name = "item.update", path = "items") public Item update(Item newObject, User user) throws UnauthorizedException, OAuthRequestException { OAuthService oAuthService = OAuthServiceFactory.getOAuthService(); if (!oAuthService.isUserAdmin()) { throw new UnauthorizedException("Only admin users can modify content."); } ... } 我知道应用引擎有用户角色的概念,但我很好奇端点是否有。 我试过使用 OAuthService.isUserAdmin() 调用,但这似乎效果不佳,文档中有一个很大的旧警告说 注意:您不应将 Endpoints 身份验证与管理控制台中的配置设置 https://developers.google.com/appengine/articles/auth 文章中描述的非 Endpoints App
  • 在 Google App Engine 中,如何检查 urlsafe 创建的 Key 的输入有效性?(In Google App Engine, how to check input validity of Key created by urlsafe?)
    问题 假设我从用户输入的 websafe url 创建一个密钥 key = ndb.Key(urlsafe=some_user_input) 如何检查some_user_input是否有效? 我当前的实验表明,如果some_user_input无效,上面的语句将抛出ProtocolBufferDecodeError (Unable to merge from string.)异常,但无法从 API 中找到任何关于此的信息。 有人可以确认这一点,并指出一些更好的方法来检查用户输入的有效性而不是捕获异常吗? 非常感谢! 回答1 如果您尝试使用无效的 urlsafe 参数构造 Key key = ndb.Key(urlsafe='bogus123') 你会得到一个错误,比如 Traceback (most recent call last): File "/opt/google/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) File "/opt/google/google_appengine/google/appengine/runtime/wsgi.py"
  • Google Appengine 1.9.3/4 和 WordPress 3.9 管理员用户在本地主机上不能完全正常工作(Google Appengine 1.9.3/4 and WordPress 3.9 Admin User not Fully Functional on Localhost)
    问题 在 appengine 上使用我的本地 wordpress 副本时,我在不同时刻遇到几个错误。 单击“帖子”时会发生这种情况,显示错误“帖子类型无效”,或者尝试创建新帖子时,没有保存框/按钮。 当尝试使用插件在其他地方更改我的主题之一中的选项时,也会发生这种情况。 我收到很多“您没有足够的权限访问此页面” 。 在大多数情况下,后端功能齐全,前端功能齐全。 我正在使用 appengine 1.9.3 和 wordpress 3.9,python 2.7.6。 我已经卸载了 1.9.3 并更新到 1.9.4,我也接受了 Wordpress 的安装 3.9.1 的请求,问题仍然存在。 我已经在以前从未安装过 app 引擎的另一台机器上安装了 1.9.3、3.9、2.7.6 配置,并且出现了同样的问题。 我让 appengine 1.9.0 和 1.9.3 与 WordPress 3.8.1 一起工作。 几天前,经过多次升级(从 1.9.3 到 1.9.4,再到 wordpress 3.9.1)后,问题开始了。 这可能与 3.9 中添加的 WPDB 上的附加层有关吗? http://make.wordpress.org/core/2014/04/07/mysql-in-wordpress-3-9/ 问题: 还有其他人遇到类似的行为吗? 如果我使用启动器更新版本,这会传播到谷歌云吗?
  • 打开zip文件或JAR清单丢失时出错:C:\ Program(Error opening zip file or JAR manifest missing : C:\Program)
    问题 我正在https://developers.google.com/appengine/docs/java/webtoolsplatform#dynamic_web_project上的“在服务器上运行项目”步骤中,遇到一个问题: 初始化VM代理库失败,初始化失败:仪器打开zip文件或JAR清单丢失时出错:C:\ Program 另一个人在这里报告了类似的问题:打开zip文件或缺少JAR清单时出错:C:/ Program。 但是解决方案是针对另一套技术的。 我正在使用Eclipse,Web工具平台和Google-App-Engine。 这很可能是因为我的Java安装在C:\ Program Files中,该目录包含一个空格。 但是我不确定该如何解决。 我不确定如何安全地将Java \ jre7目录移动到目录中没有空格的目录。 回答1 Google Cloud Platform支持的Jordan Fish帮助我解决了这个问题。 他说: 至于您尝试启动dev_appserver时的错误消息,我相信这可能是由于项目的运行配置中的vm参数引起的。 您能否转到运行配置(选择了项目,然后转到“运行”菜单并选择“运行配置”),单击“参数”选项卡,然后查看“ VM参数”文本框中列出的内容? 这是我最初的VM参数: -javaagent:C:\Program Files\eclipse
  • 从 Google App Engine 应用运行 Google Dataflow 管道?(Running Google Dataflow pipeline from a Google App Engine app?)
    问题 我正在使用 DataflowPipelineRunner 创建数据流作业。 我尝试了以下场景。 不指定任何 machineType 配g1小机使用 n1-highmem-2 在上述所有场景中,输入是来自 GCS 的一个非常小的文件(KB 大小),输出是大查询表。 我在所有情况下都出现内存不足错误 我编译的代码的大小是 94mb。 我只尝试字数统计示例,但没有读取任何输入(在作业开始前失败)。 请帮助我理解为什么我会收到此错误。 注意:我正在使用 appengine 来开始这项工作。 注意:相同的代码适用于 beta 版本0.4.150414 编辑 1 根据答案中的建议尝试了以下操作, 从自动缩放切换到基本缩放。 使用的机器类型B2提供 256MB 内存 经过这些配置,Java Heap Memory 问题就解决了。 但它试图将一个 jar 上传到超过 10Mb 的暂存位置,因此它失败了。 它记录以下异常 com.google.api.client.http.HttpRequest execute: exception thrown while executing request com.google.appengine.api.urlfetch.RequestPayloadTooLargeException: The request to https://www
  • python argparse - 在没有命令行的情况下传递值(python argparse - pass values WITHOUT command line)
    问题 我想我不了解有关 python argparse 的一些基本知识。 我正在尝试将 Google YouTube API 用于 python 脚本,但我不明白如何在不使用命令行的情况下将值传递给脚本。 例如,这里是 API 的示例。 github 和其他地方的示例将此示例显示为从命令行调用,在调用脚本时从命令行传递 argparse 值。 我不想使用命令行。 我正在构建一个使用装饰器获取用户登录凭据的应用程序,当该用户想要上传到他们的 YouTube 帐户时,他们提交一个表单,该表单将调用此脚本并将 argparse 值传递给它。 如何从另一个 python 脚本将值传递给 argparser(请参阅下面的 YouTube 上传 API 脚本中的部分代码)? if __name__ == '__main__': argparser.add_argument("--file", required=True, help="Video file to upload") argparser.add_argument("--title", help="Video title", default="Test Title") argparser.add_argument("--description", help="Video description", default="Test
  • Appengine - Reportlab(从模型中获取照片)(Appengine - Reportlab (Get Photo from Model))
    问题 我正在使用 Reportlab 生成 PDF。 无法从模型中检索照片。 #Personal Info p.drawImage('myPhoto.jpg', 40, 730) p.drawString(50, 670, 'Your name:' + '%s' % user.name) p.drawImage (50, 640, 'Photo: %s' % (user.photo)) 当我创建生成 PDF 时,出现此错误: Traceback (most recent call last): File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 513, in __call__ handler.post(*groups) File "C:\Users\hp\workspace\myApp\src\main.py", line 419, in post p.drawImage (50, 640, 'Photo: %s' % (user.photo)) File "reportlab.zip\reportlab\pdfgen\canvas.py", line 825, in drawImage File "reportlab.zip
  • 如何让 Eclipse 和 mvn appengine:devserver 相互通信?(How do I make Eclipse and mvn appengine:devserver talk to each other?)
    问题 我正在从 Google Plugin for Eclipse 切换到官方 Google App Engine Maven Plugin。 我希望,我无法弄清楚的最后一件事是如何设置良好的调试工作流程。 当我使用 GPE 时,我只是设置断点,调试器会自动停在那里,但是当我通过mvn appengine:devserver运行开发服务器时,我认为开发服务器和 eclipse 并不知道彼此。 我如何让他们互相交谈? 回答1 第一个选项是将您的项目设置为使用 WTP,如@ https://cloud.google.com/appengine/docs/java/webtoolsplatform 中所述。 这是我改用的方法。 第二个选项是使用两个调试配置。 第一个调试配置将运行您的 maven 目标,即appengine:devserver 。 第二个是Remote Java Application配置,将调试客户端连接到 devserver jvm。 这也需要将一些 jvm args 传递给 maven 目标。 <!-- GAE plugin --> <plugin> <groupId>com.google.appengine</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>1.7.5
  • 如何从IDEA+Gradle调试AppEngine本地服务器?(How to debug the AppEngine local server from IDEA+Gradle?)
    问题 我正在关注 Udacity App Engine 课程,但作为修补者,我正在关注 Gradle 和 IDEA(开源版)。 我已经使用以下 build.gradle 文件成功设置了项目 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.google.appengine:gradle-appengine-plugin:1.9.7' } } apply plugin: 'war' apply plugin: 'appengine' sourceCompatibility = 1.8 version = '1.0' appengine { daemon = true downloadSdk = true appcfg { oauth2 = true } } repositories { mavenCentral() mavenLocal() } dependencies { appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.7' compile 'com.google.inject:guice:3.0' compile 'com.googlecode.objectify:objectify:5.0.3' compile
  • 如何在Google AppEngine上实现“自动增量”(How to implement “autoincrement” on Google AppEngine)
    问题 我必须以“强单调递增”的方式标记某些东西。 可以是发票编号,运输标签编号等。 一定不能使用两次当使用了所有较小的数字(无孔)时,应使用每个数字。 幻想的表达方式:我需要数1,2,3,4 ...我可以使用的数字空间通常是100.000,而我每天可能需要1000。 我知道这在分布式系统中是一个难题,通常我们对GUID的了解要好得多。 但是在这种情况下,出于法律原因,我需要“传统编号”。 可以在Google AppEngine上实现此功能(最好在Python中实现)吗? 回答1 如果绝对必须连续增加数字且没有间隔,则需要使用单个实体,您可以在交易中更新该实体以“消费”每个新数字。 实际上,您将被限制为每秒生成大约1-5个数字-听起来很适合您的要求。 回答2 如果您放弃了ID必须严格顺序的要求,则可以使用分层分配方案。 基本思想/局限性是事务不得影响多个存储组。 例如,假设您具有“用户”的概念,则可以为每个用户分配一个存储组(为每个用户创建一些全局对象)。 每个用户都有一个保留ID列表。 为用户分配ID时,请选择保留的ID(在事务中)。 如果没有剩余的ID,则进行新的事务以从全局池中分配100个ID(例如),然后进行新的事务以将其添加到用户并同时撤回一个ID。 假设每个用户仅按顺序与应用程序进行交互,则用户对象将没有并发性。 回答3 gaetk-Google
  • AppEngine 和非 AppEngine 子域上的 OpenID 身份验证(OpenID authentication on AppEngine and non-AppEngine subdomains)
    问题 我有一个在 AppEngine 上运行的主网站。 它位于像main.example.com这样的子域上。 这个主要应用程序是我们客户的内容门户。 它提供了一个基于 YUI 的 Ajax 应用程序。 客户可以向其上传数据。 用户使用联合登录进行身份验证。 其上的 Ajax 应用程序允许用户处理先前上传的数据。 为此,它应该使用在其他子域(如service.example.com )上运行的网络服务。 Web 服务不在AppEngine 上运行,而是在我们的服务上运行 - 它占用大量 CPU 并基于其他技术集构建。 它需要在主应用程序上下载数据——但是下载服务——就像主应用程序上的所有东西一样——在身份验证墙后面。 我可以以编程方式始终允许该服务随心所欲地下载,但我认为这可能会变成一个主要的安全问题。 如何重用 OpenID 身份验证“令牌”以允许它(服务)作为经过身份验证的用户出现在主应用程序中,以便它可以下载数据? 或者,如果我能做到这一点,那么完成我打算做的事情的最佳方法是什么? 回答1 您不能真正重用身份验证令牌。 您应该使用类似于 OAuth 的东西,但由于您控制两端,因此可以使其更简单: 生成共享密钥,可通过 main.example.com 和 service.example.com 访问当用户第一次访问 service.example.com 时(没有身份验证
  • 在 AppEngine 中解码国际字符(Decoding international chars in AppEngine)
    问题 我正在 Google AppEngine 中制作一个小项目,但我在使用国际字符时遇到了问题。 我的程序通过 url "page.html?data1&data2..." 从用户那里获取数据并存储它以供稍后显示。 但是当用户使用一些像 åäö 这样的国际字符时,它会被编码为 %F4、%F5 和 %F6。 我认为这是因为 http-requests 中只允许 ASCII 表中的前 128(?) 个字符。 有没有人对此有好的解决方案? 任何简单的方法来解码文本? 最好在存储数据之前对其进行解码,还是应该在向用户显示数据时对其进行解码。 回答1 URL 可以包含任何内容,但应该对其进行编码。 在 Java 中,您可以使用 URLEncoder 和 URLDecoder 以所需的字符编码对 url 进行编码和解码。 请记住,这些类实际上用于 HTML 表单编码,但它们可以应用于 URL 的查询字符串(参数),因此不要在整个 URL 上使用它们 - 仅在参数上使用。 回答2 URI 规范 (RFC 3986) 限制了可以在 URI 中使用的字符(请参阅 ABNF)并定义了用于传输“不安全”字符的百分比编码方案。 正如 Bozho 所说,URL 的查询部分通常按照 HTML 规范 (application/x-www-form-urlencoded) 进行编码。 App Engine
  • 有什么方法可以强制重置AppEngine上所有缓存的静态文件?(Any way to force reset of all cached static files on AppEngine?)
    问题 我遇到了一个已知的AppEngine问题,如果我转到应用程序的特定URL,则会缓存错误的静态内容,但是如果我附加?foo参数来破坏缓存和VERSION.myapp,则会显示正确的静态内容。 appspot.com也可以。 有什么方法可以使未修改的URL上显示正确的内容? 我很乐意删除该应用并恢复它或其他任何令人毛骨悚然的东西。 该应用程序尚未上线,但我需要在几个小时内上线。 使这些URL正常运行的任何方法,以便与AppEngine应用进行通话的移动应用都能获取正确的数据。 编辑 卷曲标题,我看到: HTTP/1.1 200 OK ETag: "ZN9VxQ" Date: Tue, 14 Aug 2012 02:00:58 GMT Expires: Wed, 15 Aug 2012 02:00:58 GMT Content-Type: text/html Server: Google Frontend Cache-Control: public, max-age=86400 Age: 34623 Transfer-Encoding: chunked 我还要再用软管踩踏50,000秒吗? 无论如何要缩短? 编辑评论: 在app.yaml中,我有以下处理程序: - url: /static static_dir: static expiration: 1s 我现在尝试删除到期时间:
  • 在AppEngine上的Go中从init()函数中获取URL(Fetching a URL From the init() func in Go on AppEngine)
    问题 背景:我正在GAE上运行Go,并在路由器上使用了Mux。 为了获取URL,GAE要求我使用其内置的urlFetch功能。 我想让此URL提取发生在我的模块init()期间,但据我所知,我只能通过处理程序调用urlFetch。 func init() { r := mux.NewRouter() r.HandleFunc("/", homeHandler) r.HandleFunc("/about", anotherHandler) http.Handle("/", r) } GAE建议使用以下代码来制作urlFetch: c := appengine.NewContext(r) client := urlfetch.Client(c) ...但是它的参数是一个http路由器,如果我通过多路复用器路由器,它就不起作用。 因此,我不知道如何使此urlFetch发生在URL处理程序的范围之外。 传递多路复用器路由器时出错:“在“ appengine” .NewContext的参数中,不能将r(类型* mux.Router)用作类型* http.Request” 回答1 您不能使用在处理程序之外需要Context的AppEngine服务(因为创建Context需要* http.Request值)。 从本质上讲,这意味着您也不能在包init()函数中使用它们。 请注意
  • GO 在哪里寻找 google-cloud-sdk ? GOPATH 应该是什么?(Where does GO look for google-cloud-sdk ? What should GOPATH be?)
    问题 我在 osX 上设置 Go App 引擎时遇到问题。 google-cloud-sdk 路径应该在 GOROOT 还是 GOPATH 中? 我把 google-cloud-sdk 放在 /usr/local 看起来有源代码在:goroot/ /usr/local/google-cloud-sdk/platform/google_appengine/goroot/ 去环境 GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot" GORACE="" GOROOT="/usr/local/go" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" $去拿 package google.golang.org/appengine: cannot download, /usr/local/google-cloud-sdk/platform/google_appengine/goroot is a GOROOT, not a GOPATH. For more details see: 'go help gopath' package google.golang.org/appengine/datastore: cannot download, /usr/local
  • Google AppEngine 会支持 Javascript 吗?(Will Google AppEngine support Javascript?)
    问题 有没有人知道或有意见 AppEngine 是否会添加 javascript 作为支持的语言/框架以及在什么时间范围内? 回答1 请参阅:http://helma.org/wiki/Helma+NG/Running%20Rhino%20and%20Helma%20NG%20on%20Google%20App%20Engine/ 因为 Java 现在支持 JavaScript 作为其标准运行时的一部分,所以您可以做各种很酷的事情。 回答2 我在 Google I/O 上与 Google 团队进行了交谈,服务器端的原生 JavaScript 不在他们的近期路线图中。 回答3 鉴于 JavaScript 很少用作服务器端语言,这对我来说似乎不太可能。 这不像这样做会增加很多潜在用户。 (免责声明:我为谷歌工作,但我在这里写的任何内容都不应被视为谷歌对事物的立场,我对 AppEngine 团队的计划一无所知:) 编辑:为了回答 Pointy 的观点,我认为支持JavaScript 和如果您通过 Rhino 和 Java 努力尝试就可以工作之间存在很大差异。 这么说吧:如果对 Java 支持的一些模糊的更改使大多数 Java 用户的生活变得更好,但通过 Rhino 破坏了一些 JavaScript,我希望团队的优先级相对较低。 回答4 更新(由否决票提醒): 好吧,事情已经发生了变化。
  • AppEngine Cloud Endpoints 和自定义用户服务(AppEngine Cloud Endpoints and custom Users service)
    问题 是否可以将自定义用户服务(实现 UsersService 接口的服务)与 Google AppEngine 端点一起使用? 让我们以 Google AppEngine 网站为例 @ApiMethod(name = "greetings.authed", path = "greeting/authed") public HelloGreeting authedGreeting(User user) { HelloGreeting response = new HelloGreeting("hello " + user.getEmail()); return response; } 当向应用程序发出请求并命中此端点时,它会以某种方式联系用户服务并获取有关经过身份验证的用户的信息(因为 OAuth 令牌在请求中可用)。 我想以某种方式使用我自己的服务,该服务将实现UsersService接口并为我提供一个用户对象。