3

我在 Google App Engine 中有一个 Python 脚本,它只是给用户一个简单的欢迎信息。如果用户已登录 Google,则会出现带有代码的个性化欢迎消息:

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 登录页面?

4

2 回答 2

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),],)
于 2012-12-01T12:10:30.717 回答
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)

注意:此处使用的表单并不是真正的表单,因为没有要填写的任何字段。考虑使用样式类似于按钮的链接。一个例子可以在这里找到。

于 2012-12-01T12:43:32.413 回答