[golang]fiber API3~Admin:ユーザー認証・ログアウト~

こんにちは、KOUKIです。

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

前回は、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

今回は、「/api/admin/user」のユーザー認証、「/api/admin/logout」のログアウト処理を実装します。

ユーザー認証処理

前回、CookieにユーザーIDを保存する処理を実装しました。APIを利用するために、CookieからユーザーIDを取得し、そのIDをKeyにDB検索を行い、結果としてユーザー情報を返す処理を実装したいと思います。

ルートの追加

リクエスト先を追加しましょう。

コントローラーの追加

コントローラーに、User関数を追加します。

検証

検証してみましょう。以下のコマンドで、コンテナを立ち上げてください。

コンテナが立ち上がったら、以下のパラメータでリクエストを送ってみましょう。

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

OKですね。

出力形式の変更

現在のユーザーデータの戻り値は、以下のようになっています。

実は、この出力は変更することが可能です。

json:」は、Goの構造体を任意の形式でエンコーディングします。例えば、「json:”hoge”」と指定すると、呼び出し元では、keyがhogeの情報を取得できます。

呼び出し元に何も情報を返したくない場合は、json:"-"を指定してください。

データを取得し直してみましょう。

GORMでユニークキーの付け方

jsonタグでエンコードできることを学んだので、gormのfieldタグもついでに学習しましょう。

Emailをユニーク扱い(重複禁止)にしました。

動作確認のため、Register関数に以下の処理を追加します。

既に登録したEmailで、ユーザー登録をしてみましょう。

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

重複チェックは問題なく動きましたね^^

ログアウト

最後に、ログアウト処理を実装します。

ルートの追加

logoutへリクエストを送れるように、ルートを追加します。

コントローラーを追加

auathController.goにLogout関数を追加します。

Cookie情報を削除する処理を追加しました。

検証

以下のパラメータで、ログアウト処理の検証を行いましょう。

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

ログアウトに成功したら、User情報を取得してみましょう。

認証エラーになりましたね。OKです。

次回

次回は、Midlewareの作成をしましょう。

Go言語まとめ

ソースコード

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

user.go

auathController.go

routes.go

コメントを残す