我对两者之间区别的理解oauth_aware
and oauth_required
就是它aware
不强制授权,同时required
确实如此,但这不是我在实践中看到的。我有下面两个 webapp RequestHandlers,其中之一get()
方法装饰有decorator.oauth_aware
另一个与decorator.oauth_required
。但是,当我在本地或在 App Engine 上运行时,两者都会立即重定向到登录流程。
目标是为了SplashHandler
为用户提供一个授权链接(如果尚未授权),如果已授权,则转发至/tasks/
.
decorator = OAuth2Decorator(
client_id=settings.CLIENT_ID,
client_secret=settings.CLIENT_SECRET,
scope=settings.SCOPE,
user_agent='mytasks')
class SplashHandler(webapp.RequestHandler):
@decorator.oauth_aware
def get(self):
if not decorator.has_credentials():
self.response.out.write(template.render('templates/convert.html',
{'authorize_url': decorator.authorize_url()}))
else:
self.redirect('/tasks/')
class TasksHandler(webapp.RequestHandler):
@decorator.oauth_required
def get(self):
tasks = get_tasks()
tasks.sort(key=lambda x: x['due'])
self.response.out.write(template.render('templates/index.html',
{'tasks': tasks}))
application = webapp.WSGIApplication(
[('/', SplashHandler), ('/tasks/', TasksHandler)], debug=True)
oauth_aware 方法旨在明确回答“我们是否有当前用户的访问令牌?”这个问题。它可以回答这个问题的唯一方法是知道当前用户是谁,并使用应用程序引擎用户 API 来做到这一点,它本身需要权限提示才能通过您看到的重定向获取您的电子邮件/用户 ID。使用 oauth_required,您实际上会获得 2 个重定向,一个是同一个应用程序引擎,然后是一个请求 G+ 或 Docs 等权限的 oauth 重定向。
我碰巧认为这不是特别有用,我认为你的用例更常见,但显然库作者不同意。
话虽如此,oauth_aware 函数内部的代码并不是很复杂,您可以基于它制作自己的装饰器,而不执行第一次重定向。不同之处在于,在您的情况下,同一问题的答案要么是“是”,要么是“我不知道”,而不是明确的“否”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)