JWT トークンの検証に問題があります。郵便配達員から GET リクエストを行うと、検証が機能しません。リクエストはトークンなしで機能します。問題は、ミドルウェアでこの検証を使用したい場合はどうするかということです。コードの何が問題になっていますか?
カスタマーコントローラー:
authenticate: async(req,res) => {
var email = req.body.email
var password = req.body.password
let emailAuth = await customer.email_auth(email)
if(!emailAuth){
return res.status(500).json({status: "Failed", message:"User not found"});
}else if(emailAuth.password != password){
return res.status(500).json({status: "Failed", message:"Authentication failed. Wrong password."});
}else{
const payload = {
user : emailAuth.id
};
// console.log(payload)
var token = jwt.sign(payload, app.get('superSecret'),{
expiresIn: 60 // 1menit
});
// return information incl token on json
res.json({
success: true,
message: token,
// token: token
})
}
}
users.js :
router.use(function(req,res,next){
var token = req.body.token || req.query.token || req.headers['x-access-token'];
if(token){
jwt.verify(token, app.get('superSecret'), function(err,decoded){
if(err){
return res.json({success: false, message: 'Failed to authenticate token.'})
}else{
req.decoded = decoded
next()
}
})
}else{
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
})
app.js :
const express = require('express');
const jwt = require('jsonwebtoken')
const app = express();
const bodyParser = require('body-parser');
const router = require('./app/routes/users')
// Route
app.use(bodyParser())
app.use('/users', router)
//// server listening
const port = process.env.PORT || 3000;
app.listen(port)
console.log(`server listening at ${port}`);