89日目もう一つの収穫は、Udemy講座の動画を復習してみて、JWT (Json Web Token)の再取得の方法がわかったことです。
以前は、ユーザーを登録(register)した後tokenを再度取得して見る方法がわかっていなかったのですが、復習してみて初めて理解しました。
JWT (Json Web Token)再取得のためのPostman側の設定
Postmanに「Profiles」→「Login user」というcollectionを既に作成していて、そこでTokenを再取得するのでした。
設定はPOSTでURLはローカルホストを指定。今回はhttp://localhost:5000/api/authと設定しています。HeaderはKEYにContent-type、VALUEにapplication/jsonと入力。
bodyにはemailとpasswordを入力すればtoken再取得OKでした。
routes/api/auth.jsのコード
現時点ではroutes/api/auth.jsのコードはこのようになっています。
const express = require("express");
const router = express.Router();
const bcrypt = require("bcryptjs");
const auth = require("../../middleware/auth");
const jwt = require("jsonwebtoken");
const config = require("config");
const { check, validationResult } = require("express-validator/check");
const User = require("../../models/User");
// @route GET api/auth
// @desc Test route
// @access Public
// the second parameter auth makes this route protective
router.get("/", auth, async (req, res) => {
try {
const user = await User.findById(req.user.id).select("-password");
res.json(user);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
// @route POST api/auth
// @desc Authenticate user & get token
// @access Public
router.post(
"/",
[
check("email", "Please include a valid email").isEmail(),
check("password", "Password is required").exists()
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { email, password } = req.body;
// See if user exits
try {
let user = await User.findOne({ email });
if (!user) {
return res
.status(400)
.json({ errors: [{ msg: "Invalid Credentials" }] });
}
//bcrypt method compare if it is match or not
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res
.status(400)
.json({ errors: [{ msg: "Invalid Credentials" }] });
}
// Return jsonwebtoken
const payload = {
user: {
id: user.id //mongoose does not need underbar
}
};
jwt.sign(
payload,
config.get("jwtSecret"),
{ expiresIn: 360000 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
}
);
module.exports = router;