Twitter連携によってWEBアプリにログイン機能を実装するチュートリアルとして書いてきましたが、いよいよ今回が最終回です。
今回は取得したアクセストークンをCookieに保存して、Cookieの情報をもとにログイン処理を実装していきます。
こちらの記事の続きです。
Flask×Twitterでログイン機能実装③|アクセストークンを取得
前回まででTwitterAPIを操作するのに必要なアクセストークンを取得することができました。
まずは前回の振り返りから進めていきます。
もくじ
前回の内容
前回の内容を確認しておきます。
以下のコードのresに、TwitterAPIの使用に必要なアクセストークンが格納されています。
#OAuth認証でアクセストークンを取得 redirect_response = request.url twitter = OAuth1Session(ck,cs) twitter.parse_authorization_response(redirect_response) res = twitter.fetch_access_token(access_token_url)
この中には、次の4つの情報が含まれていました。
・oauth_token
・oauth_token_secret
・user_id
・screen_name
これから、このアクセストークンとスクリーンネームの値を取得してCookieに格納していきます。
FlaskでCookieを保存する
さて、取得した情報をCookieに保存するためには、Flaskのmake_responseというモジュールを利用します。
まずはmake_responseをimportしていきましょう。
from flask import make_response
前回までのコードで、アクセストークンはAT、ASという形で変数に格納していました。
その情報を次のコードでCookieに入れてあげます。
#認証情報をCookieに保存 response = app.make_response(redirect('/')) response.set_cookie('oauth_token', value = AT) response.set_cookie('oauth_token_secret', value=AS) response.set_cookie('name', value=name) return response
まず、すべての処理が終わったあとのリダイレクトを、レスポンスオブジェクトとして、resuponseに格納します。
そして、set_cookieメソッドを使って、値を名前つきで代入していきます。
第一引数の文字列がデータの名前です。
あとで情報を取り出すときに用います。
そしてここが最も肝心なのですが、最後にリダイレクトURLを格納したresponseを返しています。
ここでCookieの格納されたresponseではなく、普通にredirect(‘/’)を返してしまうと、Cookieが保存されないので注意してください。
ここまでできればCookieへの保存は完了です。
ブラウザできちんとデータが保存されたか確認してみてください。
Cookieの利用は、こちらを参考にしました。
最後に、保存されたCookieの情報を利用して、WEBページの表示をログイン後の画面に変更してあげたいと思います。
FlaskでCookieからデータを取り出す
Cookieからデータを取り出すのはとても簡単です。
Cookieの名前を指定して、cookies.getメソッドを使うだけです。
#Cokkieに認証情報が格納済みの場合 AT = request.cookies.get('oauth_token', None) AS = request.cookies.get('oauth_token_secret', None)
こちらの記事を参考にしました。
あとは煮るなり焼くなり好きにしてください。
今回作ったWEBアプリケーションでは、Cookieの有無を鍵として、ログイン済みかどうかを判断して表示される内容を変えるようにしています。
Jinja2の記法については割愛しますが、気になった方はぜひ調べてみてください。
こちらがログイン前の画面です。

こちらはログイン後の画面です。

ヘッダー部分にユーザー名が表示されているのがわかりますね。これでログイン機能を実装できました。
まとめ
ここまで全4回の記事で解説してきたTwitter認証によるログイン機能の実装、いかがでしたでしょうか?
今回はCookieの情報をそのまま使いましたが、DBと組み合わせれば、Twitter連携だけでユーザー登録を実装することも簡単にできます。
これからWEBアプリを作ろうとする方の助けに少しでもなればと願っております。