[golang]fiber API2~Admin:JWTでトークンを発行~

こんにちは、KOUKIです。

前回は、ユーザーの登録とログインの処理を実装しました。

今回は、JWTを使って、トークンの発行処理とプラスαを実装したいと思います。

尚、この記事に出てくるソースコードは、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

今回は、ログイン処理(login)にトークン発行機能を追加します

トークンが必要な理由

最初に、トークンが必要な理由を軽く触れておきます。トークンは、ログインが成功したら発行します。

もしこのトークンを発行しない場合、APIへアクセスするたびにいちいちログインして認証をPASSしなければなりません。それは、あまりに不便です。

それよりも、ログイン成功後に有効期限付きのトークンを発行し、それ以降のAPIとのやりとりはトークンが有効の間だけOKにする、といった実装にすれば効率的かつシンプルな実装になります。

トークンの発行は、JWTを使うと割と簡単に実装できるので、おすすめです。

ログイン処理の修正

トークンを発行するタイミングはログイン後なので、ログイン処理に機能を追加します。

JWTトークン発行

前回実装したauathController.goのLogin関数に、トークン発行処理を実装します。

検証

APIヘ以下のパラメータでリクエストを送り、トークンが発行されるか確認しましょう。

  • http://localhost:8000/api/admin/login
  • POST

OKですね。問題なくトークンが取得できました。

Cookie

発行したトークンは、Cookieに保存します。fiberには、Cookieメソッドがあるので、簡単に実装できます。

これで、Cookieに「Key: jwt, Value: token」の情報が保存されるようになります。

CORSの設定

CORS設定のAllowCredentialsを利用して、認証する際にCookie情報を参照するか否かを指定します。

リファクタリング

JWTトークンの実装は完了したのですが、リファクタリングしたい箇所が出てきたので、以下に記述します。

パスワードセット

パスワードを設定する専用のメソッドをUser構造体に作成します。

このメソッドは、Register関数から呼び出します。

パスワードチェック

パスワードチェック処理もUser構造体にメソッドとして実装します。

この関数は、Login関数から呼び出します。

次回

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

Go言語まとめ

ソースコード

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

models.go

auathController.go

main.go

コメントを残す