Паспорт не обновляет сеанс пользователя в req.user - PullRequest
0 голосов
/ 27 февраля 2020

Я реализую 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`,
      });
    }
  });
});

Пожалуйста, помогите мне. Я ценю все ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...