如何使用Oauth2和GAE绕过本地登录屏幕

时间:2014-01-12 20:28:29

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

我正在使用Google提供的Oauth2装饰器。现在我只是尝试使用GAE通过Oauth2向Google进行非常简单的登录。我在本地运行以进行测试,并成功通过Google进行身份验证;但是,在Google屏幕进行身份验证之前,它总是向我显示在localhost上运行的本地登录屏幕(// localhost:14080 / _ah / login?continue = http%3A // localhost%3A14080 /)。我不知道为什么我会收到这个本地登录屏幕,这个屏幕似乎与之后的Google登录界面没有任何关系。我想知道如何避免这个本地登录屏幕?用于测试目的的非常简单的代码:

import webapp2
import jinja2
from apiclient.discovery import build
from google.appengine.api import users
from oauth2client.appengine import OAuth2Decorator


template_dir = os.path.join(os.path.dirname(__file__), "templates")
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir))

decorator = OAuth2Decorator(
  client_id='the id given by google',
  client_secret='the secret given by google',
  scope='https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email')

class Handler(webapp2.RequestHandler):

    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)

    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)

    def render(self, template, **kw):
        self.write(self.render_str(template,**kw))

class MainHandler(Handler):
    @decorator.oauth_required
    def get(self):
        service = build('oauth2', 'v2', http=decorator.http())
        request = service.userinfo().get().execute()
        self.write(request["email"])

app = webapp2.WSGIApplication([
    ('/', MainHandler),
    (decorator.callback_path, decorator.callback_handler())
], debug=True)

1 个答案:

答案 0 :(得分:2)

oauth2装饰器依赖于使用appengine-logged-in用户来运行(它使用user-id来存储oauth2凭据),因此无需编写自己的代码,就无法避免屏幕出现 - 在生产中,登录将被记住最多30天。