我正在尝试设置端点 api(使用谷歌应用引擎、python),但我在获取用户个人资料信息时遇到了一些问题。API 正在工作,我可以通过本地主机上的 API Explorer 创建实体。
我的目标是允许用户通过仅提供一封电子邮件来注册我的应用程序,并授权该应用程序从他们的个人资料中获取信息的重置。我有这个端点方法:
@User.method(http_method="POST",
auth_level=endpoints.AUTH_LEVEL.REQUIRED,
allowed_client_ids=[
endpoints.API_EXPLORER_CLIENT_ID
],
scopes=[
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/plus.me',
],
user_required=True,
request_fields=('email',),
response_fields=('id',),
name="register",
path="users")
def UserRegister(self, instance):
logging.info(os.getenv( 'HTTP_AUTHORIZATION' ))
# 'Beared __TOKEN__'
logging.info(endpoints.users_id_token._get_token(None))
# '__TOKEN__'
instance.put()
return instance
这工作正常,我收到授权令牌并在数据存储中创建用户,但我不知道如何获取配置文件信息。如果我在 OAuth2 API 中输入令牌(通过API Explorer):
POST https://www.googleapis.com/oauth2/v2/tokeninfo?access_token=__TOKEN__
我得到了一些我需要的数据的令牌信息{ "user_id": "__ID__", "verified_email": true, ...}
,如果我user_id
在 +API 中使用:
GET https://www.googleapis.com/plus/v1/people/__ID__
我可以获得所需的其余数据(名称、图像等)。
我需要做什么才能在我的UserRegister()
方法中实现这一点?我宁愿只返回实体 ID 并异步完成其余的注册,但这是另一个问题,我会弄清楚(;只需要一些指导如何从我的代码中调用其他端点......
编辑:
我已经设法弄清楚如何调用其他 API(Gist 上的代码),现在 Plus API 只有一个问题:
我做了一些查询,最终得到了匿名配额错误。然后我添加了key
参数并将其设置为WEB_CLIENT_ID
or SERVICE_ACCOUNT
:
WEB_CLIENT_ID
是来自 console.developers.google.com/apis/credentials 的 OAuth2 客户端 ID(类型:Web 应用程序),SERVICE_ACCOUNT
是默认的 App Engine 服务帐户 - MY_APP@appspot.gserviceaccount.com...
现在我收到以下错误:
HttpError: <HttpError 400 when requesting https://www.googleapis.com/plus/v1/people/__VALID_USER_ID__?key=__WEB_CLIENT_ID__or__SERVICE_ACCOUNT__&alt=json returned "Bad Request">
当我使用+API explorer时,我得到了预期的结果:
REQUEST:
https://www.googleapis.com/plus/v1/people/__VALID_USER_ID__?key={YOUR_API_KEY}
RESPONSE:
200 OK + json data for user...