я использую паспорт js express, когда я захожу и получаю req.user на почтальоне, он работает как я ожидаю. Но когда я пытаюсь в веб-браузерах (я делаю запрос get с axios), это не работает. Проблема в том, что passport.deserialize не работает с Axios.
я пробовал разные методы http get request (fetch, jquery.get, axios), не об этом. Также, когда я делаю запрос manuel к моему серверу, это поворачивает как ожидалось У меня другой проект, код почти такой же и работает над этим. Я не могу понять, в чем проблема.
app.use(
session({
secret: 'fraggle-rock', //pick a random string to make the hash that is generated secure
store: new MongoStore({ mongooseConnection: db }),
resave: false, //required
saveUninitialized: false, //required
})
);
app.use(passport.initialize());
app.use(passport.session());
passport.use(
new LocalStrategy(
{
usernameField: 'username', // not necessary, DEFAULT
},
function(username, password, done) {
User.findOne({ username: username }, (err, user) => {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username' });
}
if (!user.checkPassword(password)) {
return done(null, false, { message: 'Incorrect password' });
}
return done(null, user);
});
}
)
);
app.post('/login', passport.authenticate('local'), (req, res) => {
console.log('logged in', req.user);
var userInfo = {
username: req.user.username,
};
res.send(userInfo);
});
app.get('/user', (req, res, next) => {
console.log('===== userss!s!======');
console.log(req.user);
res.send(req.user);
/* if (req.user) {
res.json({ user: req.user });
} else {
res.json({ user: null });
}*/
});
СЕРИАЛИЗАЦИЯ И ДЕЗЕРИАЛИЗАЦИЯ ПАСПОРТА
const passport = require('passport');
const User = require('../database/models/user');
// called on login, saves the id to session req.session.passport.user = {id:'..'}
passport.serializeUser((user, done) => {
if (!user) {
console.log('no user');
} else {
console.log('*** serializeUser called, user: ');
console.log(user); // the whole raw user object!
console.log('---------');
done(null, { _id: user._id });
}
});
// user object attaches to the request as req.user
passport.deserializeUser((id, done) => {
console.log('------------------DeserializeUser called');
User.findOne({ _id: id }, 'username', (err, user) => {
if (err) {
console.log(err);
} else {
console.log('*** Deserialize user, user:');
console.log(user);
console.log('--------------');
done(null, user);
}
});
});
AXIOS
axios.get('http://localhost:8000/user')
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
})
----------------------------------------------- --------------------------
ЭТО РЕШЕН, РЕШЕНИЕ ОТВЕТ