从 BlobstoreUploadHandler 获取当前用户

Posted

技术标签:

【中文标题】从 BlobstoreUploadHandler 获取当前用户【英文标题】:Get the current user from BlobstoreUploadHandler 【发布时间】:2014-12-05 19:01:46 【问题描述】:

我想。我正在为我的 Web 应用程序使用端点,但是(在端点之外)我构建了 /uploadUrl 来将文件上传到 Blobstore。

图片上传正确。所以,我需要链接上传给用户的图片,但是 users.get_current_user() 返回 None。在前端,用户使用 OAuth2 登录。对这个问题有什么想法吗?

如果我使用 endpoints.get_current_user() 会引发错误:

环境中没有有效的端点用户

这是我的代码:

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_file_infos()
        file_info = upload_files[0]

        gcs_filename = file_info.gs_object_name
        file_key = blobstore.create_gs_key(gcs_filename)

        File(file=gcs_filename, owner=users.get_current_user() ).put()

【问题讨论】:

【参考方案1】:

在您的 app.yaml 中,您必须添加 login: requiredlogin: admin

例子:

handlers:
- url: /upload_handler.*
  script: my_app.media_handlers.application
  login: required

在此之后,users.get_current_user() 应该可以工作了。

https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Requiring_login_or_administrator_status

关于此的其他帖子:Google App Engine get_current_user always return None, even if i'm logged

【讨论】:

Lepi,是的,我做到了。但现在说“请求失败,因为 URL 需要用户登录”。但是用户是从 OAuth2 登录的。我能做什么? 您使用的是login:admin 还是login:required?如果是管理员,请确保您是此应用程序的管理员,而不仅仅是简单的用户。如果您使用的是简单的login:required,那么我现在没有其他想法。【参考方案2】:

每个 App 都需要自己的登录名,如果要在代码中使用 User 类,每个类都需要导入和声明用户。

从 google.appengine.api 导入用户 导入 webapp2

class MyHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if user:
            greeting = ('Welcome, %s! (<a href="%s">sign out</a>)' %
                        (user.nickname(), users.create_logout_url('/')))
        else:
            greeting = ('<a href="%s">Sign in or register</a>.' %
                        users.create_login_url('/'))

        self.response.out.write('<html><body>%s</body></html>' % greeting)

更多详情请看这篇文章-https://cloud.google.com/appengine/docs/python/users/

【讨论】:

以上是关于从 BlobstoreUploadHandler 获取当前用户的主要内容,如果未能解决你的问题,请参考以下文章

从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?