[golang]fiber API4~Admin:Middleware~

こんにちは、KOUKIです。

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

前回は、ユーザー認証まわりとログアウトの処理実装をしました。

今回は、Middlewareの実装方法を紹介します。

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

前回

事前準備

フォルダ/ファイル作成

作るもの

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

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

今回は、「/api/admin/logout」と「/api/admin/user」へのリクエストにMiddlewareを挟む実装を行います。

Middlewareについて

ソフトウェアの世界では、「Middleware(ミドルウェア)」は様々な意味を持ちます。

しかし、この記事では、HTTPのリクエストからレスポンスまでの間に実行される任意の処理を指すことにします。

今回はCookie(認証)だけですが、公式サイトには色々なMiddlewareが紹介されています。

LoggerとかTimeoutは便利そうですね。

以下の記事も参考になると思いますので、よかったらどうぞ。

Middlewareの実装

以下の処理は、auathController.goのUser関数からの抜粋です。Cookieから「jwt」をキーにToken情報を取得しています。ログイン状態か否かを判定しているわけですが、この処理をMiddleware化することで、汎用性の高いプログラムを実装することができそうです。

Cookie取得処理

新しく作成したauth.goに以下の処理を実装します。

ctx.Nextメソッドが実行されると、Middlewareの対象となるルートのメソッドが実行されます。例えば、「/api/admin/user」の場合は、User関数が実行されます。

UserID取得処理

User関数に実装していたUserIDを取得する処理もMiddlewareに移動しておきます。

ルートの変更

ルートからMiddlewareを使えるように修正します。

Useメソッドにミドルウェア関数(IsAuthenticate)を渡して、adminAuthenticated変数を作成しました。そして、 Middlewarewの適用を許可するルートをadminAuthenticatedのメソッドから呼びだします。

User関数の修正

auathController.goのUser関数を修正します。

Middlewareを挟んでいるので、だいぶスッキリしましたね。

ログアウト関数

ログアウト関数は特に修正する必要はありませんが、検証用に以下のログを仕込んでおきましょう。

検証

早速検証してみましょう。

以下のコマンドで、コンテナを立ち上げます。

ログイン

ログインをします。

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

User

ユーザー情報を取得します。

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

データを問題なく取得できたので、Middlewareは問題なく機能したようですね。ログからも確認できます。

Middleware -> User関数の順に実行されてますね。

Logout

ログアウトも実行しましょう。

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

OKですね。ログからも確認できます。

もう一度、Userを呼び出してみましょう。認証が通らないはずです。

Greatですね、こいつぁ。Cookieを使うと結構便利です。

次回

次回は、プロファイルの更新処理を実装しましょう。

Go言語まとめ

ソースコード

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

auth.go

auathController.go

routes.go

コメントを残す