从 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: required
或 login: 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 获取当前用户的主要内容,如果未能解决你的问题,请参考以下文章