カテゴリ: Flask 更新日: 2025/12/27

FlaskでLINE・Facebookログインを実装する方法を完全ガイド!初心者でもわかる認証の基本と実装パターン

FlaskでLINE・Facebook認証を実装するパターンまとめ
FlaskでLINE・Facebook認証を実装するパターンまとめ

先生と生徒の会話形式で理解しよう

生徒

「FlaskでLINEログインやFacebookログインってできるんですか?スマホアプリみたいなログイン画面をWebサイトにも付けられますか?」

先生

「もちろんできますよ。FlaskはPythonで作られた軽量なWebフレームワークで、外部サービスの認証を組み込むのがとても簡単です。」

生徒

「スマホアプリのログインと同じ仕組みって、どうしてWebでも使えるんですか?」

先生

「LINEやFacebookはOAuthという仕組みで認証を提供していて、Webページでも同じ方式を使えるからです。では、どのように使うのかを一緒に見ていきましょう。」

1. FlaskでLINE・Facebook認証を実装する仕組みとは?

1. FlaskでLINE・Facebook認証を実装する仕組みとは?
1. FlaskでLINE・Facebook認証を実装する仕組みとは?

FlaskでLINEログインやFacebookログインを実装するには、まず「外部サービスの認証を借りる」という考え方を理解する必要があります。外部認証とは、ユーザーがあなたのWebアプリにIDやパスワードを入力する代わりに、LINEやFacebookに一度ログインして本人確認をしてもらう仕組みのことです。これによって、ユーザーは面倒な登録をせずに、普段使っているSNSアカウントで簡単にログインできます。初心者の方には、家の鍵を自分で持つのではなく、スマートロックサービスに鍵を預けて、アプリで本人確認してもらうイメージと説明するとわかりやすいかもしれません。

Flaskでこれを行うためには、まずユーザーをLINEまたはFacebookのログイン画面へリダイレクトし、ログイン後に返ってくるトークンを受け取って確認する必要があります。これがいわゆる「OAuth認証フロー」です。OAuthという言葉は専門的に聞こえますが、実は流れはとてもシンプルで、ユーザーが外部サービスで承認し、その結果をFlaskが受け取るだけです。

2. LINEログインの実装パターンを理解しよう

2. LINEログインの実装パターンを理解しよう
2. LINEログインの実装パターンを理解しよう

LINEログインは、LINE Developers Consoleという管理画面でチャネル(アプリのようなもの)を作成して設定を行います。そして、Flask側ではチャネルIDとチャネルシークレットを使ってログインURLを作成し、ユーザーを誘導します。ログイン後のコールバックURLにアクセスが戻ってくるため、そのときにアクセストークンを取得してユーザー情報を取得します。この流れは、Flaskと外部サービスが協力して本人確認をしているようなものです。

次のようなログインURLを作成してブラウザで開いてもらいます。


from flask import Flask, redirect, request
import requests
import urllib.parse

app = Flask(__name__)

LINE_CLIENT_ID = "あなたのチャネルID"
LINE_CLIENT_SECRET = "あなたのチャネルシークレット"
REDIRECT_URI = "https://example.com/callback"

@app.route("/login/line")
def login_line():
    base = "https://access.line.me/oauth2/v2.1/authorize"
    params = {
        "response_type": "code",
        "client_id": LINE_CLIENT_ID,
        "redirect_uri": REDIRECT_URI,
        "state": "random_state_string",
        "scope": "profile openid email"
    }
    url = base + "?" + urllib.parse.urlencode(params)
    return redirect(url)

3. LINEのトークンを受け取りユーザー情報を取得する

3. LINEのトークンを受け取りユーザー情報を取得する
3. LINEのトークンを受け取りユーザー情報を取得する

ユーザーがLINEで承認すると、あなたが設定したコールバックURLに認証コードが送られます。このコードを使ってアクセストークンを取り、そこからユーザーの名前やIDを取得します。まるで、鍵の番号を受け取ってその鍵を開けるための本物の鍵をLINEから受け取るようなイメージです。


@app.route("/callback")
def callback():
    code = request.args.get("code")
    token_url = "https://api.line.me/oauth2/v2.1/token"
    data = {
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": REDIRECT_URI,
        "client_id": LINE_CLIENT_ID,
        "client_secret": LINE_CLIENT_SECRET
    }
    token_res = requests.post(token_url, data=data).json()
    access_token = token_res["access_token"]
    profile_res = requests.get(
        "https://api.line.me/v2/profile",
        headers={"Authorization": f"Bearer {access_token}"}
    ).json()
    return profile_res

4. Facebookログインの実装パターンを理解しよう

4. Facebookログインの実装パターンを理解しよう
4. Facebookログインの実装パターンを理解しよう

Facebookログインも、基本的な流れはLINEとほとんど同じです。Facebook for Developersからアプリを作成し、アプリIDとシークレットを取得します。そして、Flask側でログインURLを作り、ユーザーにFacebookの認証ページに進んでもらいます。このようなSNSログインは、パソコンが苦手な人でもボタンを押すだけで完了するため、現代のWebサービスでは当たり前に使われています。


@app.route("/login/facebook")
def login_facebook():
    fb_url = "https://www.facebook.com/v15.0/dialog/oauth"
    params = {
        "client_id": FB_APP_ID,
        "redirect_uri": FB_REDIRECT_URI,
        "state": "facebook_state",
        "scope": "email,public_profile"
    }
    return redirect(fb_url + "?" + urllib.parse.urlencode(params))

5. Facebookからアクセストークンを取得しプロフィール情報を読む

5. Facebookからアクセストークンを取得しプロフィール情報を読む
5. Facebookからアクセストークンを取得しプロフィール情報を読む

Facebookでは認証後、コードが返ってくる点まではLINEと同じです。ただしアクセストークンを取得するURLが異なります。外部サービスごとに細かな違いはありますが、基本の考え方は共通ですので、慣れればすぐに応用できるようになります。


@app.route("/callback/facebook")
def facebook_callback():
    code = request.args.get("code")
    token_url = "https://graph.facebook.com/v15.0/oauth/access_token"
    params = {
        "client_id": FB_APP_ID,
        "redirect_uri": FB_REDIRECT_URI,
        "client_secret": FB_APP_SECRET,
        "code": code
    }
    token_res = requests.get(token_url, params=params).json()
    access_token = token_res["access_token"]

    profile_url = "https://graph.facebook.com/me"
    profile = requests.get(profile_url, params={"access_token": access_token, "fields": "id,name,email"}).json()
    return profile

6. Flaskで複数SNSログインをまとめて実装する考え方

6. Flaskで複数SNSログインをまとめて実装する考え方
6. Flaskで複数SNSログインをまとめて実装する考え方

LINEログインとFacebookログインを両方実装する場合でも、フローはとてもよく似ています。そのため、統一された認証処理としてまとめやすいのが特徴です。認証処理を一つのクラスにまとめたり、サービスごとに関数を用意したりすると、管理しやすい構成になります。また、現代のWeb開発ではSNSログインを搭載することがユーザー体験の向上に直結し、パスワード管理の負担も減らせます。

Flaskは軽量ながら拡張がしやすく、認証に関するライブラリも充実しているため、外部サービスを利用したログイン機能を簡単に追加できます。初心者の方が最初に実装する認証としても、SNSログインは取り入れやすい選択肢です。

カテゴリの一覧へ
新着記事
New1
Flask
FlaskでSQLインジェクションを防ぐ方法!初心者でもわかる安全なデータベース操作
New2
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New3
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New4
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本