第 9 章 アプリケーションのデプロイ 49
12.2 User Servie を使う
では、/mypageのメッセージをGoogleアカウントを使って個別化してみましょう。
/mypageに接続してきたユーザのGoogleアカウントを取得し、挨拶にユーザ名を表示します。
Googleにログインしていない場合は、ログインページを表示します。
12.2.1 User Servie を使い方
User Serviceを使うには、User API (google.appengine.api.users)を使います。次のコードは、User APIを使っ て、挨拶にユーザ名を追加しています。
1 from google.appengine.api import users
2 import webapp2
3 import logging
4
5 class MainHandler(webapp2.RequestHandler):
6 def get(self):
7 self.response.write('Hello world!')
8
第 12 章
User サービスを使う
12.1 アプリケーションにログインする
GAEでは、Googleアカウントを使ってアプリケーションの認証をすることができます。
ユーザーサービスを使えば、アプリのユーザーはアプリケーションにサインインする時にGoogleアカウントを利 用できます。
12.2 User Servie を使う
では、/mypageのメッセージをGoogleアカウントを使って個別化してみましょう。
/mypageに接続してきたユーザのGoogleアカウントを取得し、挨拶にユーザ名を表示します。
Googleにログインしていない場合は、ログインページを表示します。
12.2.1 User Servie を使い方
User Serviceを使うには、User API (google.appengine.api.users)を使います。次のコードは、User APIを使っ て、挨拶にユーザ名を追加しています。
1 from google.appengine.api import users
2 import webapp2
3 import logging
4
5 class MainHandler(webapp2.RequestHandler):
6 def get(self):
7 self.response.write('Hello world!')
8
9
10 class MyPageHandler(webapp2.RequestHandler):
11 def get(self):
12 user = users.get_current_user()
13 if user:
14 self.response.headers['Content-Type'] = 'text/plain'
15 self.response.write('Hello, ' + user.nickname())
16 else:
17 self.redirect(users.create_login_url(self.request.uri))
18
19 # ..略..
12.2.2 User API
User APIを使っている箇所を見ていきましょう。
Userオブジェクトの取得
users.get_current_user()で、Userオブジェクトを取得しています。Googleアカウントでログイン済の 場合は、Userオブジェクトが返ってきます。UserオブジェクトからはEmail,ニックネームなどの情報を取得で きます。
ログインしていない場合は、Noneを返します
1 def get(self):
2 user = users.get_current_user()
ニックネームの取得
if user:でユーザがログインしているかどうかを判定し、ログイン済の場合はuser.nickname()でアカウ ントに紐付けられたニックネームを取得しています。
1 if user:
2 self.response.headers['Content-Type'] = 'text/plain'
3 self.response.write('Hello, ' + user.nickname())
68 第12章Userサービスを使う
ログインURLを取得
ログインしていない場合は、users.create_login_urlでログインURLを作成し、ログイン画面にリダイ レクトしています。
1 else:
2 self.redirect(users.create_login_url(self.request.uri))
ログイン画面はローカル環境では、次のような画面が表示されます。[ログイン]ボタンをクリックするとログイン できます。
注釈: ログアウトする
ローカル環境で、ログアウトするには、localhost:8080/_ah/loginにアクセスします。
ログイン画面が表示されるので、[ログアウト]ボタンをクリックするとログアウトできます。
12.2. User Servieを使う 69
9
10 class MyPageHandler(webapp2.RequestHandler):
11 def get(self):
12 user = users.get_current_user()
13 if user:
14 self.response.headers['Content-Type'] = 'text/plain'
15 self.response.write('Hello, ' + user.nickname())
16 else:
17 self.redirect(users.create_login_url(self.request.uri))
18
19 # ..略..
12.2.2 User API
User APIを使っている箇所を見ていきましょう。
Userオブジェクトの取得
users.get_current_user()で、Userオブジェクトを取得しています。Googleアカウントでログイン済の 場合は、Userオブジェクトが返ってきます。UserオブジェクトからはEmail,ニックネームなどの情報を取得で きます。
ログインしていない場合は、Noneを返します
1 def get(self):
2 user = users.get_current_user()
ニックネームの取得
if user:でユーザがログインしているかどうかを判定し、ログイン済の場合はuser.nickname()でアカウ ントに紐付けられたニックネームを取得しています。
1 if user:
2 self.response.headers['Content-Type'] = 'text/plain'
3 self.response.write('Hello, ' + user.nickname())
68 第12章Userサービスを使う
ログインURLを取得
ログインしていない場合は、users.create_login_urlでログインURLを作成し、ログイン画面にリダイ レクトしています。
1 else:
2 self.redirect(users.create_login_url(self.request.uri))
ログイン画面はローカル環境では、次のような画面が表示されます。[ログイン]ボタンをクリックするとログイン できます。
注釈: ログアウトする
ローカル環境で、ログアウトするには、localhost:8080/_ah/loginにアクセスします。
ログイン画面が表示されるので、[ログアウト]ボタンをクリックするとログアウトできます。
12.2. User Servieを使う 69
main.py
main.pyは次のような内容になります。
1 # coding: utf-8
-*-2 #!/usr/bin/env python
3 #
4 # Copyright 2007 Google Inc.
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 from google.appengine.api import users
19 import webapp2
20 import logging
21
22 class MainHandler(webapp2.RequestHandler):
23 def get(self):
24 self.response.write('Hello world!')
25 26
27 class MyPageHandler(webapp2.RequestHandler):
28 def get(self):
29 user = users.get_current_user()
30 if user:
31 self.response.headers['Content-Type'] = 'text/plain'
32 self.response.write('Hello, ' + user.nickname())
33 else:
34 self.redirect(users.create_login_url(self.request.uri))
35 36 37
38 def handle_404(request, response, exception):
39 logging.exception(exception)
40 response.write('ページが見つかりませんでした。')
41 response.set_status(404)
42
43 app = webapp2.WSGIApplication([
70 第12章Userサービスを使う
44 ('/', MainHandler),
45 ('/mypage', MyPageHandler)
46 ], debug=True)
47
48 app.error_handlers[404] = handle_404