oauth2client 如何与 AppEngine 用户库一起工作 (GAE Python)
How does oauth2client work with AppEngine users library (GAE Python)
我有一个 GAE Python 应用程序,我正在从使用 App Engine 用户库过渡到使用 oauth2client 的 oauth2。
我阅读了一些关于在 App Engine 中使用 oauth2 的问题(例如,),用户库似乎不了解是否使用了任何其他身份验证系统(即 oauth2)来进行身份验证用户。
所以我打算使用 oauth2 而不是用户库来手动滚动我的 logged-in/out 模型。然而,我随后惊讶地发现,在使用 oauth2client.appengine 库时,对 users 库的调用返回了来自 oauth2 身份验证用户的数据,如示例代码所示:
import webapp2
from google.appengine.api import users
from oauth2client.appengine import OAuth2Decorator
oauth2deco = OAuth2Decorator(...)
class TestOauth(webapp2.RequestHandler):
@oauth2deco.oauth_required
def get(self):
print users.get_current_user() # Prints user's email
app = webapp2.WSGIApplication([
('/', TestOauth),
(oauth2deco.callback_path, oauth2deco.callback_handler())
])
在上面的示例中,提示用户使用 oauth2 登录屏幕(不是 来自 users.CreateLoginURL 的传统 App Engine 登录屏幕,但是对 users.get_current_user() 的调用按预期工作。
我很好奇,这是如何工作的?我看到 users.get_current_user() 函数 returns 一个新的 User() 对象,它似乎读取了一些环境变量:https://cloud.google.com/appengine/docs/standard/python/refdocs/modules/google/appengine/api/users#User
但是,我从来没有看到这些是由 oauth2client 设置的,所以我仍然很困惑。
嗯,你还在使用用户 api:
from google.appengine.api import users
...
print users.get_current_user() # Prints user's email
要使用 oauth2client
您需要在代码中实际配置和使用它,它的操作与 users
操作完全分开(它将继续完成它的工作)如果仍在使用,如您观察到的那样)。
查看 oauth2client 客户端库的 source code 的 @oauth2deco.oauth_required 装饰器,似乎该库在内部使用用户 API 来执行身份验证:
if not user:
request_handler.redirect(users.create_login_url(
request_handler.request.uri))
return
此装饰器在 oauth2client.contrib.appengine 包中定义,该包是一个实用程序,可以更轻松地在 Google App Engine 上使用 OAuth 2.0。
我有一个 GAE Python 应用程序,我正在从使用 App Engine 用户库过渡到使用 oauth2client 的 oauth2。
我阅读了一些关于在 App Engine 中使用 oauth2 的问题(例如,
所以我打算使用 oauth2 而不是用户库来手动滚动我的 logged-in/out 模型。然而,我随后惊讶地发现,在使用 oauth2client.appengine 库时,对 users 库的调用返回了来自 oauth2 身份验证用户的数据,如示例代码所示:
import webapp2
from google.appengine.api import users
from oauth2client.appengine import OAuth2Decorator
oauth2deco = OAuth2Decorator(...)
class TestOauth(webapp2.RequestHandler):
@oauth2deco.oauth_required
def get(self):
print users.get_current_user() # Prints user's email
app = webapp2.WSGIApplication([
('/', TestOauth),
(oauth2deco.callback_path, oauth2deco.callback_handler())
])
在上面的示例中,提示用户使用 oauth2 登录屏幕(不是 来自 users.CreateLoginURL 的传统 App Engine 登录屏幕,但是对 users.get_current_user() 的调用按预期工作。
我很好奇,这是如何工作的?我看到 users.get_current_user() 函数 returns 一个新的 User() 对象,它似乎读取了一些环境变量:https://cloud.google.com/appengine/docs/standard/python/refdocs/modules/google/appengine/api/users#User
但是,我从来没有看到这些是由 oauth2client 设置的,所以我仍然很困惑。
嗯,你还在使用用户 api:
from google.appengine.api import users
...
print users.get_current_user() # Prints user's email
要使用 oauth2client
您需要在代码中实际配置和使用它,它的操作与 users
操作完全分开(它将继续完成它的工作)如果仍在使用,如您观察到的那样)。
查看 oauth2client 客户端库的 source code 的 @oauth2deco.oauth_required 装饰器,似乎该库在内部使用用户 API 来执行身份验证:
if not user:
request_handler.redirect(users.create_login_url(
request_handler.request.uri))
return
此装饰器在 oauth2client.contrib.appengine 包中定义,该包是一个实用程序,可以更轻松地在 Google App Engine 上使用 OAuth 2.0。