3

ユーザーに簡単なウェルカム メッセージを表示するだけの Python スクリプトが Google App Engine にあります。ユーザーが 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

何が機能しないのか正確にはわかりません.3番目のコードブロックの最後に1つのブラケットが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 に答える