OAuth2Decorator oauth_aware форсирует аутентификацию - PullRequest
5 голосов
/ 30 марта 2012

Мое понимание разницы между oauth_aware и oauth_required заключается в том, что aware не вызывает авторизацию, в то время как required делает, но это не то, что я вижу на практике.У меня есть два WebHapp 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)

1 Ответ

7 голосов
/ 30 марта 2012

Метод oauth_aware стремится быть окончательным, чтобы ответить на вопрос «Есть ли у нас токен доступа для текущего пользователя?».Единственный способ ответить на этот вопрос - узнать, кто является текущим пользователем, и для этого он использует api пользователей ядра приложения, что само по себе требует запроса прав доступа для получения вашей электронной почты / идентификатора пользователя через перенаправления, которые вы видите.С oauth_required вы на самом деле получаете 2 перенаправления, одно и то же с движком приложения, затем одно oauth, запрашивающее разрешение на G +, Документы или что-то еще.

Мне кажется, что это не особенно полезно, я думаю, что ваш вариант использования гораздо более распространен, но, очевидно, автор библиотеки с этим не согласен.

Сказав это, код внутри функции oauth_awareне очень сложный, вы можете сделать свой собственный декоратор на его основе, который не выполняет первое перенаправление.Разница будет в том, что в вашем случае ответом на один и тот же вопрос будет «Да» или «Я не знаю», а не однозначное «Нет».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...