Google app engine GAE强制app.yaml、python装饰程序或用户登录。是否获取当前用户?

Google app engine GAE强制app.yaml、python装饰程序或用户登录。是否获取当前用户?,google-app-engine,python-2.7,oauth-2.0,google-api-python-client,app.yaml,Google App Engine,Python 2.7,Oauth 2.0,Google Api Python Client,App.yaml,我正在使用GAE应用程序的app.yaml配置文件中的“login”选项。看起来像这样: - url: /admin/.* script: myapp.app login: admin - url: /.* script: myapp.app login: required 更新(根据的建议):我希望用户始终登录(未登录的用户不能执行任何操作),并且我需要知道该用户是谁。实际上,我需要OAuth2凭据来与Google API通信(例如,我需要使用Google Profiles

我正在使用GAE应用程序的app.yaml配置文件中的“login”选项。看起来像这样:

- url: /admin/.*
  script: myapp.app
  login: admin

- url: /.*
  script: myapp.app
  login: required
更新(根据的建议):我希望用户始终登录(未登录的用户不能执行任何操作),并且我需要知道该用户是谁。实际上,我需要OAuth2凭据来与Google API通信(例如,我需要使用Google Profiles API获取一些用户的信息,并使用Google calendar API写入用户的日历)。最后,我需要一个管理员用户来执行一些操作(比如使用Google Provisioning API创建新域的用户)

我正在使用GoogleAPI客户端库,并使用oauth2装饰程序。然后,在我的RequestHandler中,我有:

class MainHandler(webapp.RequestHandler):

  @decorator.oauth_aware
  def get(self):
    if decorator.has_credentials():
      # do something

    else:
      url = decorator.authorize_url()
      self.response.out.write(template.render('templates/index.html',
           {'authorize_url': url}))
最后,我了解了另一种方法:

user = users.get_current_user()
if user:
  # do something
else:
  greeting = ("<a href=\"%s\">Sign in or register</a>." %
    users.create_login_url("/"))

  self.response.out.write("<html><body>%s</body></html>" % greeting)
user=users.get\u current\u user()
如果用户:
#做点什么
其他:
问候语=(“)%
用户。创建\u登录\u url(“/”)
self.response.out.write(“%s”%greeting)
处理用户身份验证以满足我的需要的最佳方法是什么(请参阅更新)


提前非常感谢

我想您可能会混淆OAuth 2.0装饰器与其他两种方法的区别

OAuth 2.0 decorator不是特定于您的应用程序的,如果您希望为用户获取OAuth 2.0凭据,然后使用这些凭据与Google API通信,您可以使用它

另外两种方法只是从appengine设置的会话cookie中获取用户信息

如果你真的想要一个装饰师,你可以使用
login\u required
,记录在这里:

app.yaml
中指定、检查
用户.获取当前用户
是否为
或在指定的处理程序上使用
@login\u required
之间没有最好的方法

您希望使用的三个不同时间的粗略近似值如下:

1) 如果您希望用户登录,但不需要知道具体用户,请在
app.yaml
中使用
login:required

2) 如果您想了解用户,但如果用户未登录也有回退,请使用
users。获取\u current\u user
并根据用户调整您的行为,如果返回值为
None

3) 如果您想了解用户并始终有一个用户登录,请使用
@login\u required

更新: (基于对需求的进一步解释。)由于您始终希望用户登录,并且始终希望为他们提供OAuth 2.0凭据,因此应始终使用
decorator.OAuth\u required

至于使用api,只有可以与
GoogleAPI python客户端
库一起使用。是,而日历API是

因此,您需要使用
gdatapython客户端
来使用配置API。您需要手动将从转换为对象,以便对其中任何一个使用相同的标记

使用
OAuth2Decorator
时,您将能够通过
decorator.credentials()
访问
oauth2client.client.OAuth2Redentials的实例

第二次更新: 我最近支持这一点,
gdatapython客户端

from gdata.gauth import OAuth2TokenFromCredentials
auth_token = OAuth2TokenFromCredentials(decorator.credentials())
auth_token.authorize(client)

该实现允许两个令牌/凭据对象
decorator.credentials()
auth\u令牌
保持同步,无论您在哪个对象上更改值。

感谢您的快速响应!我始终希望我的用户登录,并了解该用户。所以,我想我应该用3)。但我还需要OAuth2凭据来与Google API通信。我可以用同样的方法使用@login\u required和oAuth2 decorator吗?你应该更新你的问题来说明这一点。你的问题根本不清楚这一点
OAuth2Decorator
扩展了
用户。获取当前用户
行为,并在用户完成OAuth流后存储已登录用户的OAuth 2.0凭据。你说得对。我更新了这个问题,对我的需求做了更详细的解释。谢谢!所以我知道我的方法是对的。我实际上在用你说的图书馆。现在对我来说“黑暗”的部分是OAuth2转换。无论如何,你的回答是绝对正确和有益的。再次感谢!如果你想问另一个关于转换的问题,并告诉我,我很乐意在这方面提供帮助。