2

我正在使用Google提供的Oauth2裝飾器。現在我只想通過使用GAE通過Oauth2向Google進行非常簡單的登錄。我在本地運行以進行測試,並已成功通過Google進行身份驗證;但是,在Google屏幕進行身份驗證之前,它始終向我顯示在本地主機上運行的本地登錄屏幕(// localhost:14080/_ah/login?continue = http%3A // localhost%3A14080 /)。我不知道爲什麼我會得到這個本地登錄屏幕,它似乎沒有任何影響後面的Google登錄屏幕。我想知道如何避免這個本地登錄屏幕?用於測試目的非常簡單的代碼:如何使用Oauth2和GAE繞過本地登錄屏幕

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) 

回答

2

的OAuth2裝飾就依賴於具有AppEngine上,登錄用戶的功能(它使用用戶ID存儲的oauth2憑證),因此無需編寫自己的代碼,無法避免屏幕出現 - 在生產中,登錄將被記住長達30天。

+0

謝謝你的迴應。所以如果我明白了,如果我不使用裝飾器,而是對流進行編碼,則此用戶登錄不會出現在本地或生產空間中?另外,如果我在生產中使用裝飾器,這個登錄會在30天后至少第一次發生。從生產的角度來看,這種行爲似乎會阻止大多數使用裝飾器。 – C6Silver

+0

我相信我已經能夠回答我自己的後續行動。部署到網絡不會給我這個額外的登錄框。它只顯示在本地主機上。謝謝格雷格您的信息! – C6Silver

+0

要小心。正如Greg所說,如果您已經登錄,您將無法獲得登錄信息(即,有一個基於GAE Cookie的會話)。如果沒有會話,您將*提示輸入GAE登錄名。就我個人而言,我發現GAE登錄會妨礙我的工作,所以我選擇了「編寫自己的代碼」選項。 – pinoyyid