usersモジュールを使ったサインイン

Using the Users Service

Using Users

SDK提供のwebappモジュールと同じようにusersというモジュールを使うと、ユーザーアカウントを制御できる。

import wsgiref.handlers

from google.appengine.api import users
from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
 def get(self):
  user = users.get_current_user()

  if user:
   self.response.headers['Content-Type'] = 'text/plain'
   self.response.out.write('Hello, ' + user.nickname())
  else:
   self.redirect(users.create_login_url(self.request.uri))

def main():
 application = webapp.WSGIApplication(
                   [('/', MainPage)],
                   debug=True)
 wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
 main()

The Users API

user = users.get_current_user()

get_current_user()で現在サインイン中のユーザーを返している。サインインしているユーザーがいない場合はNoneを返す。

if user:
 self.response.headers['Content-Type'] = 'text/plain'
 self.response.out.write('Hello, ' + user.nickname())

サインインしているユーザーがすでにいる場合、この部分が処理され、
“Hello, [ユーザー名]”と画面に出力される。

else:
 self.redirect(users.create_login_url(self.request.uri))

未サインインの場合、create_login_url関数によりGoogleのアカウントサインインページにリダイレクトされる。

サインアウトは?

このサンプルでは、1度サインインするとプロセスを再起動するまでサインイン状態が維持される。

サインアウトをするには、以下のようにするとOKみたいですね。

if user:
 self.response.headers['Content-Type'] = 'text/html'
 self.response.out.write('Hello, %s (<a href=\"%s\">sign out is here</a>)' %
                  (user.nickname(), users.create_logout_url("/")))

このモジュールを使うと、認証制のWebアプリケーションが簡単に構築できるようになるのかな?