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

こんにちは。KOUKIです。

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

. リクエストデータフォーマットの変更
. パスワードリセット依頼機能
. メール送信機能
. パスワードリセット機能

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

前回

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

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

フォーマットの変更

リクエスト/レスポンスデータは、「FirstName」のようにUser構造体のパラメータ名になっていますが、jsonタグを使うと変更することが可能です。

user.goファイルを修正します。

「http://localhost/api/user」にGetリクエストを送ってみましょう。

jsonタグを指定したところは、フォーマットが変更されたことがわかりますね。パスワードも非表示になっています。

パスワードリセット依頼機能の作成

次は、パスワードリセット依頼機能を作成します。

よくログイン画面などでみる「パスワードを忘れた場合」からパスワードリセット依頼をするあの機能です。

コントローラーの作成

パスワードリセット用のコントローラーを作成します。

PasswordReset構造体は、これから作成します。

RandStringRunes関数は、簡易Tokenを作成するユーティリティ関数です。

モデルの作成

パスワードリセット用のモデルを作成します。

このモデルをAutoMigrateに含めます。

これで、PasswordResetのデータベーススキーマーが作成されるはずです。「http://localhost:8888/sql.php?server=1&db=go_auth&table=password_resets&pos=0」にアクセスすると確認できます。

ルートの追加

routers.goにForgot関数を呼びだすパスを追加します。

動作確認

以下のパラメータで、POSTリクエストを送信してください。

URL: http://localhost/api/forgot
形式: POST

OKですね。

「http://localhost:8888/sql.php?server=1&db=go_auth&table=password_resets&pos=0」にアクセスして、データが格納されているか確認しましょう。

MailHogでメール送信

以前、Go言語でメール送信ができなかったときに学んだMailHogというオープンソースを使って、メール送信機能を実装してみましょう。

「http://localhost:8025/」にアクセスするとMailHogのインターフェースを確認できます。

Goの標準パッケージであるnet/smtpパッケージを使って、メール送信機能を作成しましょう。

smtpパッケージのSendMailを使って、メールを飛ばしています。その第一引数に指定している「”smtp:1025″」は、MailHogコンテナのサービス名です。

先ほどと同様に「http://localhost/api/forgot」に対して、リクエストを送ってみましょう。リクエストが成功すれば、メールが飛ぶはずです。

OKですね。

Plain text文だとURLとTokenが確認できます。このTokenは、パスワードリセット機能で使用します。

Click <a href="http://localhost:8080/reset/hTHctcuAxhxK">here</a> to reset password!

パスワードリセット機能

次は、パスワードをリセットする機能を実装します。

Reset関数の実装

コントローラーとして、Reset関数を定義します。

やっていることは、パスワードの一致確認、Tokenの存在チェック、パスワードのエンコード(DBに平文のまま格納するわけにはいかないため)くらいの簡単な処理です。

ルートの追加

routers.goからReset関数を呼び出せるようにしましょう。

動作確認

現在、DBには「hTHctcuAxhxK」のTokenが格納されているので、これを使って動作確認をしましょう。

リクエスト先及びデータは、以下です。

URL: http://localhost/api/reset
形式: POST

パスワードが変更できました。

パスワードの変更を確認するために、以下のリクエスト先にデータを送ってログインできるか確認してみましょう。

URL: http://localhost/api/reset
形式: POST

これでバックエンド側の処理は完了です。難しい所があったかもしれませんが、慣れれば呼吸レベルでできるようになります

次回

次回からは、Vue.jsを使ったフロントエンド開発を行います。

Go記事まとめ

コメントを残す