Jor*_*alo 3 google-app-engine oauth-2.0 python-2.7 app.yaml google-api-python-client
我在我的app.yaml配置文件中使用'login'选项来获取GAE应用程序.看起来像这样:
- url: /admin/.*
script: myapp.app
login: admin
- url: /.*
script: myapp.app
login: required
Run Code Online (Sandbox Code Playgroud)
更新(通过bossylobster的建议):我希望用户始终登录(未签名的用户无法做任何事情),我需要知道用户是谁.实际上,我需要OAuth2凭据才能与Google API进行通信(例如,我需要使用Google个人资料API获取一些用户信息,并使用Google Calendar API在用户的日历中写入).最后,我需要管理员用户执行某些操作(例如使用Google Provisioning API创建新域用户)
我正在使用google-api-client库,并且使用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}))
Run Code Online (Sandbox Code Playgroud)
最后,我读到了另一种方法:
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)
Run Code Online (Sandbox Code Playgroud)
处理用户身份验证以满足我的需求的最佳方法是什么(请参阅更新)?
提前谢谢了
我想你可能会混淆OAuth 2.0装饰器与其他两种方法相比.
OAuth 2.0装饰器并非特定于您的应用,如果您想为用户获取OAuth 2.0凭据,然后使用这些凭据与Google 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,只有Google Calendar API可以与google-api-python-client库一起使用.在谷歌企业应用套件配置API是谷歌数据API,而日历API是基于发现的API.
因此,您需要使用该gdata-python-client 库来使用Provisioning API.您需要手动将oauth2client.client.OAuth2Credentials对象转换为对象,gdata.gauth.OAuth2Token才能使用相同的标记.
使用时OAuth2Decorator,您将能够访问oauth2client.client.OAuth2Credentialsvia 的实例decorator.credentials().
我最近加入了对此的支持gdata-python-client.
from gdata.gauth import OAuth2TokenFromCredentials
auth_token = OAuth2TokenFromCredentials(decorator.credentials())
auth_token.authorize(client)
Run Code Online (Sandbox Code Playgroud)
实现允许两个令牌/凭证的对象decorator.credentials(),并auth_token保持同步,无论哪个对象改变值.
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |