Python、DjangoでTwitter認証(Sign in with Twitter)するサンプル

トップページから認証リンクを押すとサインインを求められ、ユーザーのアクセストークンをDBに保存して何らかの機能を提供するwebサービスを作る際のサンプル構成です。
(イメージとしては人事ったーみたいな感じの)

参考:Implementing Sign in with Twitter | Twitter Developers

使用パッケージ

Django
requests-oauthlib

URL構成

  • /
    • トップページ(/signin/へのリンクを貼る)
  • /signin/
    • ここにアクセスしたら認証ページにリダイレクト
  • /callback/
    • 認証から戻ってくるコールバックURL
  • /app/
    • アクセストークンを使用した機能を提供するページ

大まかな流れ

  1. ユーザーがトップページの認証リンクを踏む
  2. consumer keyとconsumer secretをAPIに送ってrequest token取得
  3. request tokenを含めた認証URLにユーザーをリダイレクト
  4. ユーザーが認証完了するとコールバックURLにリダイレクトされてくる
  5. コールバックURLに渡されたGETパラメータを元にアクセストークンを取得
  6. アクセストークンをDBに保存&セッションに保存して機能ページへリダイレクト
  7. 機能ページではセッションを持っていれば機能を提供、無ければサインインへリダイレクト

Model

とりあえず必要最低限

Djangoデフォルトのidを使わずユーザIDをプライマリキーにしてみました。
twitterのIDは32bitを超えているのでBigIntegerFieldを使います。
アクセストークンは認証解除→再認証などで変更されるのでプライマリキーにはできません。

View

色々エラー処理とか足りてないかもしれないですがとりあえずこんなイメージです。

その他

公式のSign in with Twitterボタン画像はここからダウンロードできます。
Sign in with Twitter Resources | Twitter Developers

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする