Go言語とVue.jsで作るユーザー認証アプリ~バックエンド開発編Vol3~

こんにちは。KOUKIです。

前回に引き続き、ユーザー認証アプリの実装を行います。本記事は、主にバックエンドで以下の処理について書きます。

1. ログイン機能
2. JWT Tokenの作成
3. Cookieの作成
4. CORSの設定
5. ユーザー認証機能
6. ログアウト機能

作業を始める前に、コンテナを起動しておきましょう。

前回

補足:ホットリロードについて

本記事の動作環境では、Mac&reflexツールを使っているため、コンテナを立ち上げなおさなくとも修正内容が自動的に反映される環境(ホットリロード)ですが、Windows環境ではホットリロードが動作しないため、コードの修正があるたびにコンテナを立ち上げなおしてください。

ログイン機能の実装

まずは、ログイン機能を実装しましょう。

DBからユーザー情報を取得

authController.goにLogin関数を定義します。

上記のコードでは、リクエストされたメールアドレスと一致するデータをMySQLから取得しています。

これをrouters.goから呼び出します。

Talend API Testerから動作確認しましょう。

送信先: http://localhost/api/login
形式: POST

データを取得することができました。

データが存在しなかった場合

次は、データが存在しなかった場合の処理です。404エラーとエラーメッセージを返します。

今度は、以下のパラメータでリクエストを送ってみましょう。

パスワードが不一致の場合

リクエストしたパスワードと取得したデータのパスワードが不一致の場合、先ほどと同様に404エラーとエラーメッセージを返します。

今度は、以下のパラメータでリクエストを送ってみましょう。

ログインするには、以下のパラメータを送ります。

OKですね。

JWT Tokenの作成

APIでは、ログイン後にTokenを生成する流れが一般的です。そして、JWTはTokenを作るのに便利なツールです。

Go言語ではjwt-goパッケージを使って、JWT Tokenを作成します。

少し難しいですが、このコードでTokenを作成できます。

次のパラメータで、ログインしてみましょう。

jwt(Token)が取得できましたね。

Cookieの作成

次は、Cookieを作成します。

ここにjwtをキャッシングすることで、ログイン状態を判定することができます。

fiberのCookieメソッドでCookieにjwt情報を保存しました。

CORSの設定

CORSの設定も追加しておきましょう。

CORSは、異なるオリジン(ここでは、Port番号が異なる)のサイト間通信を可能にします。フロントエンドはポート番号8080、このAPIは80で動くのでCORS設定を入れて通信ができるようにします。

これは、main.goに設定します。

ユーザー認証機能

いよいよユーザー認証機能を作ります。

Cookieからjwt情報を取得して、それをtokenに変換してます。難しく感じますが、イディオムだと思って覚えてください。

最終的にtokenからUserIDを取得できるので、そのIDをキーにMySQLを検索して、User情報を取得しています。

作成した関数を呼び出せるようにrouters.goも修正します。

次の条件でリクエストを送ってください。

URL: http://localhost/api/user
形式: GET

Cookieが保存されていない場合は認証できないので、上記のようになります。そのため、以下のリクエストデータでログインをしましょう。

送信先: http://localhost/api/login
形式: POST

これでCookieが保存されたはずです。もう一度、「http://localhost/api/user」にリクエストを送ります。

OKですね。

ログアウト機能の実装

続いて、ログアウト機能を実装します。

やっていることは、空の値をセットしたcookieを作成し、上書きしているだけです。

この関数にアクセスできるようにrouters.goも変更しましょう。

以下のURLにリクエストを送って、ログアウトできるか確認しましょう。

送信先: http://localhost/api/logout
形式: GET

ログアウトできましたね。

Cookieが消えているか確認するために、「http://localhost/api/user」へリクエストを送信します。

OKですね。

長くなってきたので、ここまでにしましょう。

次回

次回も引き続き、バックエンド開発を行っていきます。

Go記事まとめ

コメントを残す