😺
Error: invalid expiresIn option for string payload の解決方法
概要
jwt を用いた認証認可処理を実装していると以下のようなエラーに遭遇しました。
Error: invalid expiresIn option for string payload
解決方法について記述します。
解決方法
以下の記事が参考になりました。
jwt.sign()
の第一引数はオブジェクトでないといけないようです。なので解決方法は以下のようになります。
解決前
import { Router } from "express";
import passport from "../middleware/auth";
import jwt from "jsonwebtoken";
import config from "../../config";
const route = Router();
route.post(
"/login",
passport.authenticate("local", { session: false }),
(req, res, next) => {
// 直接定数を指定してはいけない
const user = req.user;
const token = jwt.sign(user, config.jwt_secret, {
expiresIn: "10s",
});
res.json({ user, token });
}
);
export default route;
解決後
import { Router } from "express";
import passport from "../middleware/auth";
import jwt from "jsonwebtoken";
import config from "../../config";
const route = Router();
route.post(
"/login",
passport.authenticate("local", { session: false }),
(req, res, next) => {
const email = req.user;
// 一度オブジェクトにしてから、第一引数に代入する
const payload = { email: email };
const token = jwt.sign(payload, config.jwt_secret, {
expiresIn: "10s",
});
res.json({ email, token });
}
);
export default route;
Discussion