
ログイン情報を用いてユーザを識別できるWebサービスを作成したい。
ただし、新規にアカウントを作るのではなく、SNSなどの既存アカウントと連携した構成としたい。
また、モダンなフロントエンドを用いたいため、バックエンドはRESTfulな構成としたい。
こんなお悩みを解決します。
今回は、前回の続きで、フロントエンド側の設定について解説します。
前回の記事では、バックエンド側の設定ついて解説しています。詳しくは以下の記事を参考にしてください。
-
-
【解説】Social OAuthによるアプリケーション連携(2/3)【Django REST framework】
続きを見る
実装結果
前回同様、先に実装結果を確認したい方は、以下のリンクからGitHubへアクセスしてください。
https://github.com/yuruto-free/django-rest-framework/tree/v0.2.0
今回の構築対象
今回は、下記の3つの処理をReactで実装していきます。
- 認可リクエストの処理
- 認可レスポンスを受け、アクセストークンを発行する処理
- ユーザ情報取得処理
1.と2.は、以下に示す図の赤枠部分が該当します。

また、3.は前々回示した下記のシーケンスそのものとなります。(バックエンド側は実装済みです。)

フロントエンドの構築手順
フロントエンドの構築手順の概要は以下のようになります。
- React用の環境変数の設定
- 関連ライブラリのインストールとアプリケーションの作成
- 各種機能の実装
今回はDockerを用いて環境構築を行っていますが、ホストマシンに直接環境を構築したい場合もあると考えているため、過程が読み取れるよう、上記に示した順番で解説していきます。
今回説明する内容のメインは、「各種機能の実装」部分のため、内容を先に確認したい場合は、コチラをクリックしてください。
また、前回同様、以下のようなディレクトリ構成を想定しています。
React用の環境変数の設定
GitHubで公開しているDocker環境を利用する場合と利用しない場合で手順が異なるため、それぞれ分けて説明します。
GitHubで公開しているDocker環境を利用する場合
下記に示す内容をenvs/react/.env
ファイルとして保存します。
具体的な環境変数の意味は後述する表を参考にしてください。
GitHubで公開しているDocker環境を利用しない場合
下記に示す内容を.env
ファイルとして保存します。(保存先は各自の環境に揃えてください)
環境変数の説明
環境変数の位置づけを以下に示します。
ここで、設定時の具体的な値は、ご自身の環境に合わせて変更する必要があります。
環境変数名 | 位置づけ |
---|---|
REACT_APP_GOOGLE_CLIENT_ID | Google-OAuth2で利用するクライアントID Google Developer Consoleで確認したクライアントIDを指定する。 |
関連ライブラリのインストールとアプリケーションの作成
GitHubで公開しているDocker環境を利用する場合と利用しない場合で手順が異なるため、それぞれ分けて説明します。
GitHubで公開しているDocker環境を利用する場合
トップディレクトリで、以下のコマンドを実行し、コンテナイメージを作成します。
GitHubで公開しているDocker環境を利用しない場合
Node(バージョン 18)がインストールされている前提で説明を進めます。
React Appの作成
以下のコマンドを実行し、React Appを作成します。
関連ライブラリのインストール
以下のコマンドを実行し、関連ライブラリをインストールします。
package.jsonの修正
同一ディレクトリにあるpackage.json
を以下のように修正します。
【重要】各種機能の実装
フロントエンドの構築を行う上での要となる部分です。GitHubで公開しているDocker環境を利用する場合は、すでに作成済みのため、対応不要です。
フロントエンド側は、次の3つに分けて構築していきます。
- 全体構成(
App.js
に対応) - ログイン・ログアウトの処理(
components/login-logout.js
に対応) - ユーザ情報取得処理(
components/user-info.js
に対応)
全体構成
ここでは、以下の2点を満たすコンポーネントを作成します。
- ソーシャルログインの状態(未ログイン、ログイン中)を管理
- ログインコンポーネント、ユーザ情報コンポーネント、ログアウトコンポーネントの配置
※表示非表示は、個々のコンポーネント内で管理します
実装例は以下のようになります。また、@react-oauth/google
の使い方は作者のGitHubを参照してください。
https://github.com/MomenSherif/react-oauth
ログイン・ログアウトの処理
ログイン時は、以下の2点を順に実行します。ただし、1.はライブラリ内で実装済みのため、ここでは2.の対応がメインとなります。
- 認可リクエストを出す処理
- 認可レスポンスを受け取った後、バックエンドにアクセストークンを発行する処理
実装例を以下に示します。
認可リクエストの処理
先に述べたように、ライブラリに組み込まれている機能を利用します。
DOMと関連する処理を抜き出すを以下のようになります。
認可レスポンスの受領・アクセストークン発行
ここから、バックエンド側の設定と紐づけて処理していく必要があります。
認可リクエストの処理において、認可レスポンスを受け取るコールバック関数をhandleAuthorizationCode
として設定しました。
このコールバック関数内から以下の内容のPOSTリクエストを投げることで、アクセストークンが取得できます。
項目 | 内容 |
---|---|
エンドポイント | /api/login/social/jwt-pair/ |
データ | ・provider: 'google-oauth2' ・ code: response.code ・ redirect_uri: redirectURL ※redirectURLは、http://localhost:3000となる |
戻り値 | ・access token ※ユーザ情報を取得する際の認証時に利用する ・refresh token ※アクセストークンの有効期限が切れた際に利用する |
ここで、エンドポイントの「social/jwt-pair/
」は、rest-social-auth
のライブラリの仕様に合わせて、付与しています。
※コチラの5.3節にPOST時のエンドポイントが定義されています。

該当する実装例を抜き出すと以下のようになります。
ログアウトの処理
ログアウト時の実装例を以下に示します。
内容は非常に単純で、ライブラリで提供されているログアウト処理を呼び出した後、App.js
で管理しているログイン状態を初期化する処理を呼び出します。
ユーザ情報取得処理
最後に、ユーザ情報取得処理について説明します。
注意点として、アクセストークンの有効期限が切れていないことが前提となるため、アクセストークンが切れた後は、現時点の実装ではReact上で情報を更新することはできません。
今回はサンプルというのもあり、ログイン処理後、5分以内であれば動作するようになっています。
バックエンド側でJWTのアクセストークンのライフタイムを以下のように設定しているため、アクセストークンの有効期限は5分以内となります。
上記の制約の下で、ユーザ情報を取得する際の実装例を以下に示します。
上記の実装例の中で、以下が重要な箇所となります。
バックエンド側で以下のように設定しているため、バックエンドが保持しているデータを取得する際はJWTによる認証が必要になります。
このため、以下のように、ヘッダーを付与してデータへのアクセス時に認証が行われるようにします。
以上で、Social OAuth+Django REST Framework+Reactによるアプリケーション連携の方法の説明は終了となります。
まとめ
今回は、Reactを用いたフロントエンド側の実装内容について説明しました。
非常にシンプルな内容でしたが、最低限必要な設定や実装例は紹介できたと考えています。
アプリケーション連携時の参考にしていただければと思います。