Я реализую JWT с паспортом.
Случай 1:
Я вхожу в систему с помощью "xuser". после этого я проверил req.user, а затем обнаружил, что его xuser-данные.
Случай 2:
. Теперь я авторизируюсь с помощью "yuser". но когда я проверяю req.user, то снова нахожу детали xuser (это моя проблема. Я думаю, что это должно быть обновлено подробностями yuser)
Я пытался войти в систему для многих пользователей, но req.user останется прежним ( печать сведений о пользователе)
Я перезапустил службу, но никаких изменений в результате.
index. js
"use strict";
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const mongoose = require('mongoose');
const config = require('./config/database');
const serverConfig = require('./config/server');
const users = require('./routes/users');
// Connect To Database
mongoose.connect(config.database, { useNewUrlParser: true, useUnifiedTopology: true });
// On Connection
mongoose.connection.on('connected', () => {
console.log('Connected to database');
});
// On Error
mongoose.connection.on('error', (err) => {
console.log('Database error: '+err);
});
const app = express();
// Port Number
const port = serverConfig.port;
// CORS Middleware
app.use(cors());
// Body Parser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
// Routes
app.use('/users', users);
// Start Server
app.listen(port, () => {
console.log('Server started on port '+port);
});
, паспорт. js
"use strict";
const User = require('../models/user');
const config = require('./database');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
module.exports = function(passport) {
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
// or you could create a new account
}
});
}));
};
пользователей. js
"use strict";
const express = require('express');
const router = express.Router();
const passport = require('passport');
const jwt = require('jsonwebtoken');
const User = require('../models/user');
const config = require('../config/database');
const serverConfig = require('../config/server');
const multer = require('multer');
const path = require('path');
const Notification = require('../models/notification');
// Authenticate
router.post('/authenticate', (req, res, next) => {
let username = req.body.username;
let password = req.body.password;
User.authUser(username, (err, user) => {
if (err) {
console.log(`Error aunthenticating user
${ err }`);
}
if (!user) {
return res.json({
success: false,
msg: 'Invalid Username',
});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) {
console.error(`Error in password comparision
${ err }`);
}
if (isMatch) {
let token = jwt.sign(user.toJSON(), config.secret, {
expiresIn: 608400,
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
id: user._id,
name: user.name,
username: user.username,
},
role: user.role,
});
} else {
res.json({
success: false,
msg: 'Invalid Password',
});
}
});
});
});
router.post('/updateProfile', passport.authenticate('jwt', { session: false }), (req, res, next) => {
// req.logout();
const user = {
username: req.body.username,
email: req.body.email,
batch: req.body.batch,
branch: req.body.branch,
about: req.body.about
};
User.authUser(user.username, (err, data) => {
console.log('_________________XXXXXXXXX')
console.log(req)
if (data.username === req.user.username) {
User.updateProfile(user, (err, data) => {
if (err) {
console.error(`Error in updating profile
${ err }`);
res.json({
success: false,
msg: `Something went wrong, please try again`,
});
} else {
res.json({
success: true,
msg: `Profile updated Successfully`,
});
}
});
} else {
res.json({
success: false,
msg: `Unauthorized`,
});
}
});
});
Пожалуйста, помогите мне. Я ценю все ответы.