Flaskを用いたソーシャルログインの実装について解説します。本記事では、基本的な実装手法から、GoogleやFacebook等で使用されるOAuth認証についても詳しく説明します。具体的なコード例とその解説、応用例も含めています。
目次
はじめに
ソーシャルログインは、現代のWebアプリケーションにおいてほぼ必須の機能といえます。ユーザーが複数のパスワードを覚える必要がなく、また開発者側も安全な認証システムを容易に実装できます。この記事では、PythonのWebフレームワークであるFlaskを用いて、ソーシャルログインをどのように実装するかを説明します。
基本的な流れ
ソーシャルログインの基本的な流れは以下の通りです。
- ユーザーがソーシャルログインボタンをクリック
- 外部サービスの認証ページへリダイレクト
- 認証後、トークンを取得
- トークンを用いてユーザー情報を取得
- ユーザー情報を用いて内部での認証処理
Flaskでの基本的な実装
必要なパッケージ
Flaskでソーシャルログインを実装するには、以下のパッケージが必要です。
- Flask
- Flask-OAuthlib
- requests
コード例
from flask import Flask, redirect, url_for
from flask_oauthlib.client import OAuth
app = Flask(__name__)
oauth = OAuth(app)
google = oauth.remote_app(
'google',
consumer_key='YOUR_CONSUMER_KEY',
consumer_secret='YOUR_CONSUMER_SECRET',
request_token_params={
'scope': 'email',
},
base_url='https://www.googleapis.com/oauth2/v1/',
request_token_url=None,
access_token_method='POST',
access_token_url='https://accounts.google.com/o/oauth2/token',
authorize_url='https://accounts.google.com/o/oauth2/auth',
)
@app.route('/')
def index():
return 'トップページです'
@app.route('/login')
def login():
# Googleの認証ページへリダイレクト
return google.authorize(callback=url_for('authorized', _external=True))
@app.route('/logout')
def logout():
# ログアウト処理
return 'ログアウトしました'
@app.route('/login/authorized')
def authorized():
response = google.authorized_response()
if response is None or response.get('access_token') is None:
return 'アクセスが拒否されました'
# トークンの取得とユーザー情報の取得
access_token = response.get('access_token')
me = google.get('userinfo', token=(access_token, ''))
# ユーザー情報を用いて何らかの処理
return f'ログイン成功:{me.data["email"]}'
if __name__ == '__main__':
app.run(debug=True)
コードの解説
上記のコードでは、`Flask-OAuthlib`を使用してGoogleでのソーシャルログインを実装しています。主要な部分に日本語のコメントを入れて説明しやすくしています。
応用例1:Facebookでのソーシャルログイン
具体的なコードとその解説を以下に示します。
# 必要な部分のみ抜粋しています
facebook = oauth.remote_app(
'facebook',
consumer_key='YOUR_CONSUMER_KEY',
consumer_secret='YOUR_CONSUMER_SECRET',
request_token_params={
'scope': 'email',
},
base_url='https://graph.facebook.com/v10.0/',
request_token_url=None,
access_token_method='GET',
access_token_url='/oauth/access_token',
authorize_url='/oauth/authorize',
)
# 以下のルーティングと認証処理は上記のGoogleの例とほぼ同じ
コードの解説
この例では、Facebookでのソーシャルログインを実装しています。基本的な流れはGoogleと同じですが、`base_url`や`authorize_url`などが異なります。
応用例2:ユーザー情報のデータベース保存
# 必要な部分のみ抜粋しています
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True, nullable=False)
# 認証後の処理でデータベースに保存
@app.route('/login/authorized')
def authorized():
# (前略)
user = User(email=me.data["email"])
db.session.add(user)
db.session.commit()
return f'ログイン成功:{me.data["email"]}'
コードの解説
この例では、認証後に取得したユーザー情報をSQLiteデータベースに保存しています。`Flask-SQLAlchemy`を使用して簡単にデータベースの
操作ができます。
まとめ
Flaskでソーシャルログインを実装する方法について詳しく解説しました。基本的な流れから具体的なコード、さらには応用例に至るまでを網羅的に説明しています。この記事がFlaskでのソーシャルログイン実装の参考になれば幸いです。
コメント