从BlobstoreUploadHandler获取当前用户

时间:2014-12-05 19:01:46

标签: python google-app-engine google-cloud-platform google-cloud-storage google-cloud-endpoints

我想从BlobstoreUploadHandler获取当前用户。我正在为我的Web应用程序使用端点,但是(在端点之外)我构建/ uploadUrl将文件上传到Blobstore。

图片正确上传。因此,我需要链接上传到用户的图像,但 users.get_current_user()返回无。在前端,用户使用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()

2 个答案:

答案 0 :(得分:1)

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

来自google.appengine.api导入用户 import 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/

答案 1 :(得分:0)

在您的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