【Node.js】トークンを保持しているユーザーのみ、特定のデータを送信する
トークンを検証して、トークンを保持しているユーザーのみ、book のデータを表示させます。
コードは、前回までのコードを使用します。
【Node.js】jsonwebtokenを使って、JWTを設定する
index.js
routes/auth.js
routes/book.js
model/user.js
model/book.js
controllers/auth.js
controllers/book.js
トークンを検証するためのミドルウェアを作成
トークンの認証が出来た場合は、データを見られる様にします。
また、認証が出来ない場合は、エラーを表示するためのミドルウェアを作成します。
middleware フォルダを作成し、isAuth.js を作成します。
jsonwebtoken を呼び出します。
外部で使える様にするため、エクスポートします。
またトークンは、リクエストヘッダーに乗せますので、リクエストヘッダーのAuthorizationを取得します。
リクエストヘッダーにAuthorizationがない場合、エラーを出力します。
Authorization の中身は、通常『Bearer トークン』です。
『Bearer 』が必要ないので split を使って分割し、トークンの方を指定します。
トークンをデコードして、バックエンドのトークンとあっているか、verify を使って確認します。
処理を継続させたいので、next()を書きます。
これで、認証のミドルウェアの作成が一通り完了しました。
ミドルウェアをデータに接続
先程作成したミドルウェアを、book のデータに接続します。
routes フォルダの book.js を開きます。
まずは、isAuthを呼び出します。
getの第二引数に、isAuthを入れます。
これで完成しましたので、Postman で確認します。
Send ボタンを押してみると、
ステータスコード 401 のエラーが発生しました。
これは、Postman でトークンを設定していなかったから起こったエラーです。
トークンを設定するために、まずは、auth/login に POST して、トークンを取得します。
GET の book/get に戻り、URL 下にある Authorizationw をクリックします。
Type で『Bearer Token』を選択し、先程のトークンを貼り付けます。
改めて、『Send』をクリックすると、
データが取得できました。
トークンが違っていたり、トークンを取得してから、バックエンドで設定した 1 時間が経過すると、以下の様にステータスコード 500 のエラーが発生します。
お知らせ
私事ですが、Udemyで初心者を対象にしたReactの動画コースを作成しました。
Reactについて興味がありましたら、ぜひ下のリンクからアクセスしてください。
詳しくはこちら(Udemyの外部サイトへ遷移します)