Flask-Dance × Google OAuth:コールバックURLは固定、遷移先は自由に設定する方法
はじめに
Flask-DanceでGoogle OAuth認証を実装する際、Google Cloud Consoleに登録するコールバックURLは固定である一方、認証後の遷移先はFlaskアプリ側で自由に制御できます。本記事では、この仕組みと実装方法をサンプルコード付きで解説します。
Google側のコールバックURLは固定
Flask-Danceでは、Google用のBlueprintを作成すると、自動的にコールバック用のエンドポイントが生成されます。例えば、Blueprintのprefixを/login、名前をgoogleとした場合、コールバックURLは以下のように固定されます。
https://yourdomain.com/login/google/authorized
Google Cloud Console側では、このURLを正確に登録する必要があります(末尾の/やhttpsなども一致していなければ認証エラーになります)。

読者
え、じゃあ遷移先は全部このURLになっちゃうの?

ごりら
そこは安心して。コールバックは固定だけど、その後どこにリダイレクトするかはFlask側で自由に決められるんだ。
Flask側で遷移先を指定する方法
Blueprint作成時にredirect_toを指定することで、認証完了後に任意のビュー関数へ遷移できます。
from flask import Flask, redirect, url_for
from flask_dance.contrib.google import make_google_blueprint, google
app = Flask(__name__)
app.secret_key = "supersecret"
google_bp = make_google_blueprint(
client_id="GOOGLE_CLIENT_ID",
client_secret="GOOGLE_CLIENT_SECRET",
scope=["profile", "email"],
redirect_to="after_login" # 認証後に遷移するビュー名
)
app.register_blueprint(google_bp, url_prefix="/login")
@app.route("/")
def index():
return 'Googleでログイン'
@app.route("/after-login")
def after_login():
if not google.authorized:
return redirect(url_for("google.login"))
resp = google.get("/oauth2/v2/userinfo")
user_info = resp.json()
return f"Hello, {user_info['email']}!"
ポイント
- Google側には
/login/google/authorizedを登録する - 認証後の処理は
redirect_toで指定可能 - 複数環境(開発・本番)で利用する場合は両方のコールバックURLを登録
まとめ
Flask-DanceでGoogle OAuthを使う場合、Google側に登録するコールバックURLは固定ですが、遷移先はFlask側で自由に設定できます。この仕組みを理解しておくことで、ログイン後の導線を柔軟に作れます。


コメント