Flask-Dance × Google OAuth:コールバックURLは固定、遷移先は自由に設定する方法

Flask

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側で自由に設定できます。この仕組みを理解しておくことで、ログイン後の導線を柔軟に作れます。

コメント

タイトルとURLをコピーしました