首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >oauth2client如何使用AppEngine用户库(GAE )

oauth2client如何使用AppEngine用户库(GAE )
EN

Stack Overflow用户
提问于 2018-03-13 22:31:04
回答 2查看 213关注 0票数 2

我有一个GAE应用程序,我正在从使用app用户库过渡到使用oauth2使用oauth2client。

我读到了一些关于在App中使用oauth2的问题(例如,oauth2),而且用户库似乎不理解是否有其他身份验证系统(即oauth2)被用于对用户进行身份验证。

因此,我计划使用oauth2而不是用户库来提交我的登录/退出模型。然而,我惊讶地发现,在使用oauth2client.appengine库时,对用户库的调用从经过oauth2身份验证的用户返回数据,如本示例代码所示:

代码语言:javascript
运行
复制
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登录屏幕)登录,但是对users.get_current_user()的调用与预期的一样工作。

我很好奇,这是怎么回事?我看到users.get_current_user()函数返回一个新的User()对象,它似乎读取了一些环境变量:https://cloud.google.com/appengine/docs/standard/python/refdocs/modules/google/appengine/api/users#User

然而,我从未见过这些设置是由oauth2client,所以我仍然感到困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-20 16:40:45

通过查看oauth2client客户端库的@oauth2deco.oauth_required装饰器的源代码,在内部,库似乎正在使用Users来执行身份验证:

代码语言:javascript
运行
复制
if not user:
    request_handler.redirect(users.create_login_url(
        request_handler.request.uri))
    return

这个装饰器是在oauth2client.contrib.appengine包中定义的,这是一个使Google上的OAuth 2.0更容易使用的实用工具。

票数 1
EN

Stack Overflow用户

发布于 2018-03-13 22:50:33

那么,您仍然在使用users:

代码语言:javascript
运行
复制
from google.appengine.api import users

    ...

    print users.get_current_user()  # Prints user's email

要使用oauth2client,您需要在代码中实际配置和使用它,它的操作与users操作完全分离(如您所观察到的,如果仍在使用的话,users操作也将继续执行其工作)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49266887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档