毎回、認証ルートへのポストリクエストを行っているときに、前のトークンにトークンを追加します。 、私はこの問題jwt.sign()毎回前のトークンにトークンを追加しました
const express = require("express");
const router = express.Router();
const User = require("../models/user");
const bcrypt = require("bcryptjs");
const config = require("../config/data");
const jwt = require("jsonwebtoken");
const mongoose = require("mongoose");
//Registration route
router.post("/register",(req,res)=>{
let date=new Date();
let newUser = new User({
name:req.body.name,
email:req.body.email,
password:req.body.password,
role:"User",
isActive:true,
created:date,
updatedToken:"JWT"
});
User.addUser(newUser,(err,user)=>{
if(err){
res.json({success: false, msg:'Failed to register user'});
} else {
res.json({success: true, msg:'User registered'});
}
});
});
//Authentication route
router.post('/authenticate', (req, res) => {
const email = req.body.email;
const password = req.body.password;
User.getUser(email, (err, user) => {
if(err) throw err;
if(!user){
return res.json({success: false, msg: 'User not found'});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if(err) throw err;
if(isMatch){
let payload={
name:user.name,
email:user.email,
role:user.role,
deleted:user.deleted,
isActive:user.isActive,
created:user.created,
updatedToken:user.updatedToken,
};
let token=jwt.sign(payload,config.secret)
User.saveToken(email,token,(err,success)=>{
if(err) return err;
console.log("Success");
res.json({
success: true,
token: token
});
});
} else {
return res.json({success: false, msg: 'Wrong password'});
}
});
});
});
// router.use(function(req, res, next) {
// // check header or url parameters or post parameters for token
// var token = req.body.token || req.query.token || req.headers['x-access-token'];
// // decode token
// if (token) {
// // verifies secret and checks exp
// jwt.verify(token, app.get('superSecret'), function(err, decoded) {
// if (err) {
// return res.json({ success: false, message: 'Failed to authenticate token.' });
// } else {
// // if everything is good, save to request for use in other routes
// req.decoded = decoded;
// next();
// }
// });
// } else {
// // if there is no token
// // return an error
// return res.status(403).send({
// success: false,
// message: 'No token provided.'
// });
// }
// });
// // Dashboard
// router.get('/dashboard', (req, res) => {
// res.json({user: req.user});
// });
module.exports = router;
の理由を見つけるカントそして、これはスキーマと機能
const mongoose = require("mongoose");
const bcrypt = require("bcryptjs");
const config = require("../config/data");
const jwt = require("jsonwebtoken");
let userSchema = mongoose.Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
password:{
type:String,
required:true
},
role:{
type:String,
required:true
},
deleted:{
type:Date,
default:null,
},
isActive:{
type:Boolean,
required:true
},
created:{
type:Date,
required:true
},
updatedToken:{
type:String,
required:true
}
});
let User = module.exports = mongoose.model('User',userSchema,'Users');
module.exports.getUser = function(username, callback){
let query = {email: username}
User.findOne(query, callback);
}
module.exports.addUser = function(newUser, callback){
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if(err) throw err;
newUser.password = hash;
newUser.save(callback);
});
});
}
module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, (err, isMatch) => {
if(err) throw err;
callback(null, isMatch);
});
}
module.exports.saveToken = function(username,token,callback){
let query = {email:username};
let updateToken={updatedToken:token};
User.findOneAndUpdate(query,updateToken,callback);
}
module.exports.generateToken=function(payload,secret){
let token = jwt.sign(payload,secret,{
expiresIn: 604800
})
return token;
}
これは、サーバー
const express = require ("express");
const app = express();
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const config = require("./config/data");
const cors = require("cors");
const morgan = require("morgan");
const route = require("./routes/users");
mongoose.Promise = global.Promise;
let options = {
useMongoClient: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 500,
poolSize: 10,
bufferMaxEntries: 0
};
mongoose.connect(config.database,options);
let db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log(`DB connected ${new Date()}...`);
});
app.use(bodyParser.json());
app.use(cors());
app.use(morgan('dev'));
app.get('/',(req,res)=>{
res.send("Works aziz");
});
app.use("/users",route);
app.listen(config.port,()=>{
console.log(`Server running ${config.port}...`);
});
である私がいることを必要ですユーザーがposを実行している場合トークンを生成して変数トークンに渡す必要があります。ユーザーがポストリクエストを行うたびに連結する必要はありません。 ありがとうございます!!!!!!
try:findOneAndUpdate(query、{$ set:updateToken}、callback) –
私はしようとしましたが、問題はjwt.sign()メソッドから来て、トークンをユーザが投稿要求を行い、 jwt.sign()メソッドの値ですが、以前のすべてのpost要求値を受け取り、それらをすべて連結します。お返事ありがとう))))))) –
これは共有することができる公開プロジェクトですか?私はそれを複製して再現できないように思ったのでそれを複製してみたいと思っています:) –