プログラム関係の備忘録。技術系記事1000記事以上を目指すブログ

ユーザー認証系のサーバーAPIをnode.jsで作ってみた

API

前書き

SPAなどで使われる、アプリケーションサーバー(以下、APP側) をreactやvue.jsで実装、データ処理などはAPIサーバー(以下、API側) で行うといったアプリケーション。

フロントとバックエンドが明確に分かれているため開発効率が良いことや、APIは使いまわしが効くので、 APP側を別のプラットフォームに移すときなどはフロントだけに集中できたりといったメリットがあるので結構好きな開発方法です。

今回したかったことは、上記構成でのアプリケーション作成時に、どのアプリでもだいたい使うユーザー操作や、二次認証、トークンによるセッション管理等を爆速で始められるように、ユーザー認証等ができるベースAPIを作ってみました。

API一覧

POST/api/v1/account/regist本登録認証用のURLを発行します
GET/api/v1/account/temp仮認証中の状態を返します
POST/api/v1/accountユーザー情報の本登録を行います
GET/api/v1/accountトークンを発行します
POST/api/v1/account/resetパスワード再発行用のURLを発行します
PUT/api/v1/accountパスワードの更新を行います
POST/api/v1/account/delete退会用のURLを発行します
DELETE/api/v1/account/ユーザー情報を論理削除します

とりあえずは上記8つのAPIをexpressで作りました。
以下からそれぞれのAPIの動作を説明していきます。

各APIの仕様

【POST】/api/v1/account/regist

本登録認証用のURLを発行します

Parameters

paramdescriptionrequiredtype
accountEメールアドレスrequiredstring

Responses(application/json)

statusobjecttypeexample
201messagestring入力したアドレス宛にメールを送信しました
400messagestringこのメールアドレスはすでに利用されています。
403messagestringtype:[“The account field is required.”]
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【GET】/api/v1/account/temp

メールアドレスに届いたURLをAPP側で表示するときに叩くイメージです。
認証状態を返します。(APP側の仕様次第では省略可)

Parameters

paramdescriptionrequiredtype
uuidUUIDrequiredstring
type発行タイプrequiredint

Responses(application/json)

statusobjecttypeexample
200messagestringok
400messagestring認証URLの有効期限切れ、もしくはURLが正しくありません
403messagestringtype:[“The type field is required.”]
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【POST】/api/v1/account

ユーザー情報の本登録を実行します。

Parameters

paramdescriptionrequiredtype
uuidUUIDrequiredstring
passwordパスワードrequiredstring
userNameユーザー名requiredstring

Responses(application/json)

statusobjecttypeexample
201messagestringユーザー登録が完了しました。
400messagestringこのメールアドレスはすでに利用されています。
403messagestringtype:[“The uuid field is required.”]
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【GET】 /api/v1/account

トークンを発行します

Parameters

paramdescriptionrequiredtype
accountEメールアドレスrequiredstring
passwordパスワードrequiredstring

Responses(application/json)

statusobjecttypeexample
200tokenstringeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoxLCJpYX…
400messagestringメールアドレスまたはパスワードが正しくありません
403messagestringメールアドレスまたはパスワードが正しくありません
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【POST】 /api/v1/account/reset

パスワード再発行用メールを送信

Parameters

paramdescriptionrequiredtype
accountEメールアドレスrequiredstring

Responses(application/json)

statusobjecttypeexample
201messagestring入力したアドレス宛にメールを送信しました
400messagestringメールアドレスまたはパスワードが正しくありません
403messagestringtype:[“The type account is required.”]
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【PUT】 /api/v1/account/

パスワードの更新を行います

Parameters

paramdescriptionrequiredtype
uuidUUIDrequiredstring
old_passwordパスワードrequiredstring
new_passwordパスワードrequiredstring

Responses(application/json)

statusobjecttypeexample
201messagestringユーザー情報を更新しました
400messagestringメールアドレスまたはパスワードが正しくありません
403messagestringtype:[“The type account is required.”]
500messagestringサーバー処理にて問題が発生しました。

内部ロジック

【POST】/api/v1/account/delete

退会用のURLを発行します

Parameters

paramdescriptionrequiredtype
accountEメールアドレスrequiredstring

Responses(application/json)

statusobjecttypeexample
201messagestring入力したアドレス宛にメールを送信しました
400messagestringメールアドレスまたはパスワードが正しくありません
403messagestringtype:[“The type account is required.”]
500messagestringサーバー処理にて問題が発生しました。

【DELETE】/api/v1/account

ユーザー情報を論理削除します

Parameters

paramdescriptionrequiredtype
uuidUUIDrequiredstring
passwordパスワードrequiredstring

Responses(application/json)

statusobjecttypeexample
201messagestring退会処理が完了しました
400messagestringメールアドレスまたはパスワードが正しくありません
403messagestringtype:[“The type account is required.”]
500messagestringサーバー処理にて問題が発生しました。

あとがき

一通り作ってみましたが、あれもしたいこれもしたいが増えてきて仕様検討と実装を同時にしていくとなかなか時間がかかってしまいましたが、これでユーザー情報を持つアプリケーション作成時に作業が捗りそうです。

後はトークンをheaderに付与したAPIを随時追加していく形になります。

もっと形になってきたら何かの形で公開しようと思っていますので、使いたい開発者の方はご連絡いただけると喜びます