• 検索結果がありません。

第 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())

6812Userサービスを使う

ログイン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())

6812Userサービスを使う

ログイン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([

7012Userサービスを使う

44 ('/', MainHandler),

45 ('/mypage', MyPageHandler)

46 ], debug=True)

47

48 app.error_handlers[404] = handle_404