我一直在努力让以下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()中删除丑陋的用户同意屏幕,因此一直尝试这种方法。
答案 0 :(得分:0)
oauth.get_current_user
(带或不带范围参数)检查对您的应用的请求是否包含针对您的应用铸造的授权标题(A)和(B)包括请求的范围(如果有)。
要准备令牌,发送您的应用的程序请求必须遵循https://developers.google.com/identity/protocols/OAuth2中列出的步骤。我强调 program ,因为直接来自浏览器的请求将没有适当的授权标头 - 除非浏览器正在运行一个知道如何通过的Javascript程序(可能以前也是由您的应用程序提供)有问题的箍。
我不知道这将如何让你“摆脱丑陋的用户同意屏幕” - 这不是由users.get_current_user本身显示的,而是来自Google身份验证和授权服务器(其中,不可避免地,任何需要制作OAuth2令牌的程序将会结束)。
如果不同,但在同意屏幕上,用户是否会同意为您的应用提供您所要求的任何范围,包括,例如,了解用户的电子邮件?