Google app engine GAE强制app.yaml、python装饰程序或用户登录。是否获取当前用户?
我正在使用GAE应用程序的app.yaml配置文件中的“login”选项。看起来像这样: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
- 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转换。无论如何,你的回答是绝对正确和有益的。再次感谢!如果你想问另一个关于转换的问题,并告诉我,我很乐意在这方面提供帮助。