GAE Python OAuth 2.0 NotAllowedError

时间:2015-11-15 00:37:43

标签: python python-2.7 google-app-engine oauth-2.0

我一直在努力让以下python代码示例正常工作,但没有成功 https://cloud.google.com/appengine/docs/python/oauth/

gae-test.py

from google.appengine.api import oauth
import logging
import traceback
import webapp2

class Test(webapp2.RequestHandler):
  def get(self):
    scope = 'https://www.googleapis.com/auth/userinfo.email'
    self.response.write('\noauth.get_current_user(%s)' % repr(scope))
    try:
      user = oauth.get_current_user(scope)
      self.response.write(' = %s\n' % user)
      self.response.write('- auth_domain = %s\n' % user.auth_domain())
      self.response.write('- email       = %s\n' % user.email())
      self.response.write('- nickname    = %s\n' % user.nickname())
      self.response.write('- user_id     = %s\n' % user.user_id())
    except oauth.OAuthRequestError, e:
      self.response.set_status(401)
      self.response.write(' -> %s %s\n' % (e.__class__.__name__, e.message))
      logging.warn(traceback.format_exc())

app = webapp2.WSGIApplication([
    ('/', Test),
], debug=True)

和app.yaml

application: mytestapp
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: .*
  script: gae-test.app

每次错误都是 NotAllowedError 。它永远不会让用户同意屏幕。

我在GAE项目中创建了客户端ID(即使我不认为只需检索用户电子邮件),也填写了用户同意表。我认为必须启用所有必需的API,因为users.get_current_user()工作正常。

我的要求是从users.get_current_user()中删除丑陋的用户同意屏幕,因此一直尝试这种方法。

1 个答案:

答案 0 :(得分:0)

oauth.get_current_user(带或不带范围参数)检查对您的应用的请求是否包含针对您的应用铸造的授权标题(A)和(B)包括请求的范围(如果有)。

要准备令牌,发送您的应用的程序请求必须遵循https://developers.google.com/identity/protocols/OAuth2中列出的步骤。我强调 program ,因为直接来自浏览器的请求将没有适当的授权标头 - 除非浏览器正在运行一个知道如何通过的Javascript程序(可能以前也是由您的应用程序提供)有问题的箍。

我不知道这将如何让你“摆脱丑陋的用户同意屏幕” - 这不是由users.get_current_user本身显示的,而是来自Google身份验证和授权服务器(其中,不可避免地,任何需要制作OAuth2令牌的程序将会结束)。

如果不同,但在同意屏幕上,用户是否会同意为您的应用提供您所要求的任何范围,包括,例如,了解用户的电子邮件?