【发布时间】:2015-06-03 18:38:31
【问题描述】:
我有一个 Google Cloud Endpoint,我通过 JavaScript 和 Google JavaScript 客户端库从 HTML 页面访问它。
我使用标准的 OAuth2.0 进行身份验证
gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: mode}, callback);
一切正常,我能够从底层数据存储区读取/写入数据。
在同一个 AppEngine 项目中,我有一个 servlet,它根据数据存储区中的数据生成 PDF。
我希望能够使用通过 api.auth.authorize() 方法进行身份验证的同一用户从我的 HTML 页面调用此 Servlet。
在servlet中,通过
获取用户UserService userService = UserServiceFactory.getUserService();
并在数据存储中查询该用户的数据,然后生成显示该数据的 PDF。
我不知道如何使用 OAuth 身份验证用户的凭据调用此 url (servlet)。
你能帮帮我吗? 提前致谢!
请注意,几个月前有人问过同样的问题,但没有“完整”的答案:GAE User API with OAuth2
【问题讨论】:
-
到目前为止,我还没有找到我的问题的任何答案,但我想分享一个解决我问题基础的业务需求的解决方案。因此,简而言之,要求是根据数据存储区中的某些数据生成 PDF,并链接到通过 Google JavaScript 客户端库通过 OAuth 进行身份验证的特定用户。我的解决方案基于云存储。我首先在 Cloud Storage 中为每个用户创建一个存储桶,并保护该存储桶以仅允许该用户访问。我在 Endpoint 中生成 PDF 并将其写入 ByteArrayOutputStream(名为“os”)。请参阅下一条评论。
-
然后我通过
GcsFileOptions options = new GcsFileOptions.Builder().mimeType("application/pdf").build(); GcsOutputChannel outputChannel = gcsService.createOrReplace(gcsfileName, options); ByteBuffer buf = ByteBuffer.wrap(os.toByteArray()); outputChannel.write(buf); outputChannel.close();将其保存到云存储中,然后用户可以通过以下 URLhttps://storage.cloud.google.com/-bucketname-/-filename-打开 PDF,前提是并且仅当他之前使用他的 Google 帐户进行了身份验证(特别是来自调用端点的页面)。我希望这会对某人有所帮助!
标签: google-app-engine google-oauth google-cloud-endpoints