[golang]fiber API2~Ambassador: リクエストスコープ~

こんにちは、KOUKIです。

GolangのWebフレームワークであるfiberを使ってAPIを開発しています。

前回は、Ambassador APIのマルチルート設定を行いました。

今回は、リクエストスコープの設定を行います。

尚、この記事に出てくるソースコードは、Udemyの「React, NextJS and Golang: A Rapid Guide – Advanced」コースを参考にしています。解釈は私が勝手に付けているので、本物をみたい場合は受講をお勧めします!

前回

作るもの

Ambassdor機能を作りたいと思います。エンドポイントは、次の通りです。

エンドポイント
  • POST /api/ambassador/register
  • POST /api/ambassador/login
  • GET /api/ambassador/user
  • POST /api/ambassador/logout
  • PUT /api/ambassador/users/info
  • PUT /api/ambassador/users/password

リクエストスコープの設定

本APIには、Ambassador APIとAdmin APIがあり、それぞれのパスにリクエストを送ります。

前回、それを可能にするために、Ambassador用のマルチルートを設定しました。

しかし、ログインする際に一つ問題があります。

ログインする時は、JWTトークンを作成し、それをCookieに保存していました。その情報は、Ambassdor/Adminどちらの情報のものなのか区別をつけていないので、片方のAPIでログインしてしまうともう片方のAPIが処理できてしまうというバグがあります

これを是正するために、リクエストの種類を判別するスコープを設けたいと思います。

JWTトークン処理の移行

最初に、auathController.goのログイン関数に実装していたJWTトークンの作成処理をMiddleware関数として外出しします。

この変更により、ログイン処理を修正します。

リクエストスコープの設定

次に、リクエストスコープを設定します。

Middlewareのauth.goに、以下の構造体を宣言しましょう。

Scopeプロパティには、”admin”などの文字列を入れて、リクエストを判別します。

次に、auth.goのIsAuthenticate関数を修正します。

次に、GenerateJWT関数を修正します。

GetUser関数も修正します。

この修正に伴い、authControllers.goのログイン関数も修正する必要があります。

検証

検証してみましょう。

まずは、admin APIでログインします。

  • URL: http://localhost:8000/api/admin/login
  • 形式: POST

次に、admin APIのuserを実行します。

  • URL: http://localhost:8000/api/admin/user
  • 形式: GET

次に、この状態でAmbassador API側のuserを実行します。

  • URL: http://localhost:8000/api/ambassador/user
  • 形式: POST

「認証がされていません」と出ましたね! 成功です。

一応、Ambassador側でログインしてから、もう一度userを叩いてみましょう。

  • URL: http://localhost:8000/api/ambassador/login
  • 形式: GET

この状態で、もう一度Ambassadorのuserを叩きます。

OKですね。

APIごとにリクエストが振り分けられていることが確認できたと思います。

次回

次回は、Ailasesを実装しましょう。

Go言語まとめ

ソースコード

ここまでのソースコードを以下に記載します。

auth.go

auathController.go

コメントを残す