読者です 読者をやめる 読者になる 読者になる

Kay Framework で認証に Twitter の OAuth を使う方法

appengine python

Kay Framework は認証機能を提供しています

認証方法も多様で、Google アカウントを使った認証だけでなく、データストア認証*1OpenID、さらには OAuth まで利用できます。

認証方法は Kay の認証ミドルウェア用バックエンドとして提供されています

簡単に言うと、Kay の認証機能を拡張するプラグインみたいなものです。そのため、設定をちょっと記述するだけで認証方法を変更できます。

今回は Twitter の OAuth 認証を使う方法をご紹介

TwitterGoogle App Engine アプリを登録

下記のページにアクセスして、作成中(予定?)のアプリを登録します。

アプリ情報は適当な内容を入力して下さい。登録が成功すると、ConsumerKey と ConsumerKeySecret が発行されるので、メモしておきます。

settigs.py を修正

Twitter の OAuth を認証で使うように設定します。

INSTALLED_APPS = (
    'core', # メインのアプリ
    'kay.ext.gaema',
)

APP_MOUNT_POINTS = {
    'core': '/',
}

# 認証ミドルウェアを指定して認証機能を有効にする
# セッションも有効にしておく
MIDDLEWARE_CLASSES = (
    'kay.auth.middleware.AuthenticationMiddleware',
    'kay.sessions.middleware.SessionMiddleware',
)

# OAuth で認証するためのバックエンドを指定
AUTH_USER_BACKEND = 'kay.auth.backends.gaema.GAEMABackend'

# OAuth で認証に使うユーザークラス
# 独自のユーザークラスを使うとき指定
# 省略すると GAEMAUser クラスが使われる
GAEMA_USER_MODEL = 'core.models.User'

# Twitter の ConsumerKey と ConsumerKeySecret を指定
GAEMA_SECRETS = {
    'twitter_consumer_key': 'Twitter の ConsumerKey',
    'twitter_consumer_secret': 'Twitter の ConsumerKeySecret',
}

# OAuth で使用するサービスを指定
# twitterfacebook など
# kay.ext.gaema.services に定義されている
GAEMA_VALID_SERVICES = [
    'twitter',
]

ちなみに gaema は Kay に同梱されている、Google App EngineOpenID や OAuth を使った認証を実現するためのライブラリです。

models.py を修正

settings.py の GAEMA_USER_MODEL で独自のユーザークラスを使う場合は、アプリフォルダ内の models.py に GAEMAUser 派生クラスを定義する必要があります。デフォルトのユーザークラスでいい場合は不要です。

from kay.ext.gaema.models import GAEMAUser

class User(GAEMAUser):
    pass
たったこれだけで OK

create_login_url や create_logout_url など認証まわりの動きが、Twitter の OAuth を使ったものに変わります。request.user から取得できるオブジェクトには、ちゃんと Twitter のアカウント情報が格納されています。

Twitter アプリを作りたいとき楽ですね

Kay を使えば、面倒な Twitter の OAuth 対応が、ほんの少しのコードで実装できます。開発スピードがかなりアップするんじゃないでしょうか。認証まわりって面倒ですからね。

ただ、Twitter API を呼び出すには access_toke や access_token_secret が必要です。どこかの辞書に格納されているという話なんですが、まだ取得方法が分っていないです。これは今後の課題。

*1:ユーザー名とパスワードをアプリに登録するやつ。基本認証。