Я создаю простое игровое приложение с использованием React и Node с использованием passport (наряду с passport-local и passport-local-mon goose) и просто не могу заставить своих пользователей оставаться аутентифицированными. Я успешно вхожу в систему, но последующий вызов ax ios (после пяти секунд) немедленно возвращает false, когда вызывается req.isAuthenticated (). Я вылил на подобные страницы stackoverflow, но ни одно из предложений не сработало.
Вот мой маршрут входа в систему:
router.route("/").post((req, res) => {
console.log(req.session);
//initiate the response object, which will contain one value to indicate whether the login was a success
const responseObject = {
loginWasSuccess: false
};
let authenticate = User.authenticate();
authenticate(req.body.username, req.body.password, (err, result) => {
if (err) {
console.log(err);
res.json(responseObject);
}
if (result) {
req.login(result, (err) => {
if (err) {
return next(err);
}
responseObject.loginWasSuccess = true;
return res.json(responseObject);
});
} else {
res.json(responseObject);
}
});
});
Обратите внимание, что когда я console.log result
, полный пользователь данные для правильного пользователя в моей базе данных будут напечатаны.
Вот где я настраиваю и инициализирую сессию / паспорт:
app.use(cors());
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
const corsOptions = {credentials: true};
app.use(cors(corsOptions));
passport.serializeUser(function(user, done) {
console.log("serializing user");
console.log("user.id is: " + user._id);
console.log(user);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
console.log("deserializing user");
done(err, user);
});
});
Обратите внимание, что когда я вхожу, оператор console.log в метод serializeUser печатает правильные данные и идентификатор пользователя, которые хранятся в моей базе данных.
Наконец, вот вызов ax ios, который я выполняю в функции handleSubmit в моем интерфейсе для извлечения данные:
const transport = axios.create();
transport.post("http://localhost:5000/login/", {
username: inputData.username,
password: inputData.password
}).catch(err => {
handleError();
}).then(response => {
console.log(response && response.data);
if (response && !response.data.loginWasSuccess) {
handleError();
}
else {
// setRedirectRoute(props.redirectUrl || "/");
setTimeout(() => {
const transport = axios.create();
transport.get("http://localhost:5000/authenticate/").catch(err => {
handleError();
}).then(response => {
console.log(response && response.data);
});
}, 5000);
}
});