Я пытаюсь реализовать аутентификацию на основе сеанса с использованием passport
, для подписывающего пользователя, которому я даю, я могу получить информацию о пользователе из сеанса по последующим запросам.
Проблема, с которой я столкнулся, заключается в том, что, когда несколько пользователей вошли в систему, сеанс всегда возвращает информацию о последнем вошедшем пользователе, независимо от того, какой пользователь делает запрос.
Как отличить разных пользователей отсозданы разные сеансы?
конфигурация паспорта
/**
* @author Wokoro Douye Samuel
*/
import passport from 'passport';
import { Strategy as LocalStrategy } from 'passport-local';
import userRepository from '../components/user/repository';
import { userInfo, verifyPassword } from '../utils';
/**
* @description Passport serialization configuration.
*/
passport.serializeUser((uuid, done) => done(null, uuid));
/**
* @description Passport user deserialization configuration.
*/
passport.deserializeUser(async (user_id, done) => {
const user = await userRepository.getOne({ uuid: user_id });
const userDetails = userInfo(user);
done(null, userDetails);
});
/**
* @description Passport strategy configuration.
*/
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password',
},
(async (email, password, done) => {
let passwordVerified = false;
try {
const result = await userRepository.getOne({ email });
if (result) {
const { dataValues: { password: hashedPassword } } = result;
passwordVerified = verifyPassword(password, hashedPassword);
}
if (!passwordVerified) {
return done(null, false, { message: 'Email or password incorrect' });
}
const { uuid } = userInfo(result.dataValues);
return done(null, uuid);
} catch (err) {
return done(err);
}
}),
));
export default passport;
пользовательский контроллер
/**
* @author Wokoro Douye Samuel
*/
import userRepository from './repository';
import { userInfo, hashPassword } from '../../utils';
export default {
/**
* @description Controller method to create new user.
*
* @param {object} req - HTTP request object.
*
* @param {object} res - HTTP response object.
*
* @param {function} next - Function to call next function.
*
* @returns {object} Returns created user and status code
*/
async create({ body }, res, next) {
body.password = hashPassword(body.password);
try {
const result = await userRepository.create(body);
res.status(200).send({
status: 'success',
data: userInfo(result),
});
} catch (err) {
next(err);
}
},
/**
* @description Controller method to login user.
*
* @param {object} req - HTTP request object.
*
* @param {object} res - HTTP response object.
*
* @param {function} next - Function to call next function.
*
* @returns {object} Returns login success message and status code.
*
*/
async login(req, res, next) {
try {
return res.status(200).send({
status: 'success',
data: 'login succeful',
});
} catch (error) {
next(error);
}
},
};
Пользовательские маршруты
/**
* @auther Wokoro Douye Samuel
*/
import { inputValidation, authenticateUser } from './validation';
import userControllers from './controller';
/**
* @description Variable to hold user routes.
*/
export default [
{
path: '/signup',
handlers: [...inputValidation, userControllers.create],
method: 'post',
},
{
path: '/login',
handlers: [authenticateUser, userControllers.login],
method: 'post',
},
];
Ссылку на мой репозиторий можно найти здесь