2012-12-01 57 views
3

我在Google App Engine中有一個Python腳本,它只是給用戶一個簡單的歡迎消息。如果用戶登錄到谷歌則是用代碼個性化的歡迎消息:Google App Engine重定向到按鈕上的用戶登錄點擊

if users.get_current_user(): 
    self.response.out.write('Welcome ' + users.get_current_user()') 

我想要做的是如果用戶尚未登錄,都可以被壓制,這將重定向按鈕他們到Google登錄頁面登錄他們的帳戶。

else: 
    #redirect user to login page here 

我試過一些方法來做到這一點,但沒有人會工作。我曾嘗試:

self.response.out.write('<form action="%s"> 
         <input type="submit" value="Login to Google"></form> 
         ' % users.create_login_url('/') 

當按下按鈕沒有任何反應,所以我嘗試:

self.response.out.write('<form action="%s"> 
         <input type="submit" value="Login to Google"></form> 
         ' % self.redirect(users.create_login_url('/')) 

這只是一旦主網頁被訪問將用戶重定向到登錄頁面。

當按鈕被按下時,有什麼方法可以將用戶重定向到Google登錄頁面嗎?

回答

2

你所缺少的是檢查URL和用戶重定向的處理程序:

所以對於形式的行動,你將不得不將其更改爲:

signin_page = "/signin/" 
    self.response.write('<form action="%s"> 
         <input type="submit" value="Login to Google"></form>' 
         % signin_page) 

然後在處理程序:

class SignInHandler(webapp2.RequestHandler): 
    def get(self): 
     self.redirect(users.create_login_url(self.request.uri)) 

最後:

application = webapp2.WSGIApplication([('/', IndexPageHandler), 
             ('/signin/', SignInHandler),],) 
1

我不確定什麼是不起作用的 - 在第三個代碼塊的末尾只有一個支架缺失。下面是你的榜樣完整的代碼工作正常:

import webapp2 
from google.appengine.api import users 

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     user = users.get_current_user() 
     if user: 
      msg = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" % 
        (user.nickname(), users.create_logout_url("/"))) 
     else: 
      msg = ("<form action=\"%s\">" 
        "<input type=\"submit\" value=\"Login to Google\">" 
        "</form>" % 
        users.create_login_url("/")) 
     self.response.out.write("<html><body>%s</body></html>" % msg) 

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

注:這裏使用的形式是不是一個真正的形式,因爲沒有任何字段填寫考慮使用一個鏈接,是病急亂投醫像一個按鈕。一個例子可以發現here

相關問題