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

公開日: : Python , ,


トップページから認証リンクを押すとサインインを求められ、ユーザーのアクセストークンを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

関連記事

no image

python-twitterでツイート時刻(created_at)からローカルのdatetimeを作成する

python-twitterのStatusクラスからの投稿時刻の取り方には二通りあり、それぞれUTC

記事を読む

no image

Django 1.7の新機能Migrations

Django 1.6まででは作成後のモデルに変更を加える場合、手動でSQLを発行するかsouthのよ

記事を読む

no image

Djangoでreverse後のURLにスクリプト名が入ってしまう

レンタルサーバー上にCGIとしてDjangoを動かそうとしていて、このチケットのdjango.cgi

記事を読む

no image

Djangoのタイムゾーンサポートについて調べた

Djangoの1.4以降で追加されたタイムゾーンサポートのことがよくわかってなかったのでドキュメント

記事を読む

no image

Djangoのカスタムコマンドをコード内から呼ぶ

ドキュメントにまんま書いてあるけど一応メモ。 カスタムコマンド内から他のコマンドを呼び出したい

記事を読む

no image

Django 1.5でDEBUG=Falseにしたら動かないとかstaticが出ないとか

Django 1.5でプロジェクト作って少しして試しにDEBUG=Falseにしてみたら「Serve

記事を読む

no image

PythonでC++のstd::mapみたいな挙動が欲しい

最近競技プログラミングの問題をちょろちょろやってて、それでC++を使ってるんですが、C++のstd:

記事を読む

no image

DjangoでMySQLに絵文字を保存

Twitter関連のプログラムを書いていたのですが、絵文字を含むツイートをDBに保存しようとするとエ

記事を読む

no image

PySideインストール後にImportError

QtのPythonバインディングにはPyQtとPySideがあって、元々あったのはGPLのPyQtだ

記事を読む

no image

pipでThe C extension could not be compiledとかいうWARNING

CentOS 6.5にpipでpython-twitterを入れようとしたら、依存パッケージのsim

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
PythonでC++のstd::mapみたいな挙動が欲しい

最近競技プログラミングの問題をちょろちょろやってて、それでC++を使っ

no image
ファイルパーミッションを664から644に変えてもGitで反映されない

って思ったらGitのこと勘違いしてたっていうメモ。 Gitはファイル

no image
CentOS6.9を7.3にアップグレード

CentOS6系から7系へのアップグレードはアップグレードツールが存在

no image
ブラウザにフォームの値を覚えさせない

formのinputやselectにvalueやselectedで現在

no image
[WordPress]dbDelta()でテーブルが作成できない

WordPressのプラグインの勉強をしていて、テーブルを作成するため

→もっと見る

PAGE TOP ↑