我用了一个GAE应用程序的app.yaml我的配置文件“登录”选项。 是这样的:
- url: /admin/.*
script: myapp.app
login: admin
- url: /.*
script: myapp.app
login: required
UPDATE(通过的建议bossylobster ):我想总是签署了用户(未签名的用户不能做任何事情),我需要知道用户是谁。 其实,我需要的OAuth2凭证与谷歌的API进行通信(例如,我需要获取一些用户与谷歌的配置文件API信息,并在用户与谷歌日历API日历写)。 最后,我需要一个管理员用户执行某些操作(如创建新域名的用户,与谷歌配置API)
我使用谷歌的API客户端库,并与装饰的oauth2玩弄。 然后,在我的RequestHandlers,我有这样的:
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)
什么是处理用户的认证,以满足我的需要(见UPDATE)的最佳方法是什么?
提前谢谢了
我想你可能会混淆的OAuth 2.0装饰做什么与其他两种方法。
OAuth 2.0已装饰不特定于您的应用程序,如果你想获得的OAuth 2.0凭据的用户,然后使用这些与谷歌API来沟通,你会使用它。
另外两个是简单的方式来获得从通过App Engine的设置会话cookie的用户信息。
如果你真的想要一个装饰,你可以使用login_required
,记录在这里:
https://developers.google.com/appengine/docs/python/tools/webapp/utilmodule
有指定中间没有一个最好的方法app.yaml
,检查是否users.get_current_user
是None
或使用@login_required
上指定的处理。
三个不同时代的粗略估计你想使用这些有以下几种:
1)如果您希望用户可以登录,但并不需要知道具体的用户,请使用login: required
在app.yaml
。
2)如果想知道的,但也有一个后备,如果用户没有登录,使用users.get_current_user
和调整你的行为给用户或None
如果是这样的返回值。
3)如果你想知道用户总是有一个登录,使用@login_required
。
更新:
(对需求的进一步解释为主。)因为你总是希望你的登录用户总要的OAuth对于他们2.0凭证,你应该总是使用decorator.oauth_required
。
作为使用的API,只有谷歌日历API可以与使用google-api-python-client
库。 在谷歌企业应用套件配置API是谷歌数据API ,而日历API是基于发现的API 。
其结果是,你需要使用gdata-python-client
库使用配置API。 你需要手动从转换oauth2client.client.OAuth2Credentials
对象为gdata.gauth.OAuth2Token
对象使用同样的任何一个。
当使用OAuth2Decorator
,你就可以访问的实例oauth2client.client.OAuth2Credentials
通过decorator.credentials()
第二次更新:
我最近加入支持这gdata-python-client
。
from gdata.gauth import OAuth2TokenFromCredentials
auth_token = OAuth2TokenFromCredentials(decorator.credentials())
auth_token.authorize(client)
实现允许两个令牌/凭证对象decorator.credentials()
和auth_token
保持同步,无论哪个对象改变值。
文章来源: GAE enforcing sign in by app.yaml, python decorators or users.get_current_user?